Compter le nombre de fois d'une chaine de caractère dans une chaine

Résolu
ulysse00 Messages postés 291 Date d'inscription lundi 6 novembre 2006 Statut Membre Dernière intervention 12 mai 2013 - 22 mars 2007 à 19:58
ulysse00 Messages postés 291 Date d'inscription lundi 6 novembre 2006 Statut Membre Dernière intervention 12 mai 2013 - 23 mars 2007 à 12:34
bonsoir mes amis

String  chaine2 =""12131415";
ArrayList s = new ArrayList();
     s.add("12");
     s.add("13");
     s.add("14");
     s.add("15");
 
    int index = 0;
    int ok=0;
   
 
while (!"".equals(chaine2)){
            for (int j = s.size() - 1; j >= 0 ; --j) {
 
 
                   index = chaine2.lastIndexOf(s.get(j).toString());
                   if (index != -1) {
                     ok++;
                     chaine2 = chaine2.subSequence(0, index).toString();
                   }
                  
                   
                  
 
                 }
                
                  chaine2 = chaine2.subSequence(0, chaine2.length()).toString();
 
              }
              System.out.println(ok);
 
<!-- END TEMPLATE: bbcode_code -->b
affchage ok =4
si j'ai String chaine2 "12135715"; oki3
le problème si j'ai String chaine2 "1213141215"; oki4 c'est faux au lieu de m'afficer 5 il m'affiche 4 meme pour ça String chaine2 "1213141215151313"; au lieu de m'affiche oki 8 il m'affiche 4

String chaine2 = "1233151420141214";au lieu de m'afficher 5 il m'affiche 2<!-- / message -->

4 réponses

Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
22 mars 2007 à 22:08
Salut petite rectification:

String s1 = "1234556347696";



String s2 = "12";



int count = 0; // nombre d'occurrence




while (true) {



    int index = s1.indexOf (s2);



    if (index == -1) {



       break;




    }



    else {



       ++count;



       s1 = s1.substring (index + s2.length);




    }




}



__________________________________________________________
A.B. :

"Qui veut faire quelque chose trouve un moyen. - Qui ne veut rien faire trouv
3
gmi19oj19 Messages postés 545 Date d'inscription lundi 10 mai 2004 Statut Membre Dernière intervention 28 septembre 2011 2
22 mars 2007 à 22:24
Salut,

A vue de nez, le problème intervient si l'une des chaines que tu recherches pparait plusieurs fois.

Le problème, selon moi, c'est que vu la manière dont tu fais les tests, dans la chaine :

"1213141215";

tu vas avancer après avoir recuperer le dernier 15 , puis le denier 14 , en enlevant le 12 qui suit.

En passant,

chaine2 = chaine2.subSequence(0, chaine2.length()).toString();

ne sert pas à grand chose ^^

Donc moi j'ferai :

for (int j = s.size() - 1; j >= 0 ; --j) {
    String motif = s.get(j).toString();
    int index = 0;
    int index2 = index + motif.length();
    while(index2 < chaine2.length()) {
       index = chaine2.indexOf(motif,index);
       if(index != -1) {
          ok++;
          index2 = index + motif.length();
       }
       else break;    
    }
}

ou un truc dans le genre^^

gmi19oj19
3
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
22 mars 2007 à 22:07
Salut:

Autre solution:



String s1 = "1234556347696";



String s2 = "12";



int count = 0; // nombre d'occurrence




while (true) {



    int index = s1.indexOf (s2);



    if (index == -1) {



       break;




    }



    else {



       ++count;



       s1 = s1.substring (index, index + s2.length);




    }




}



______________________________________________________________________________
A.B. : 

"Dieu nous donne des mains, mais il ne bâtit pas les ponts."
0
ulysse00 Messages postés 291 Date d'inscription lundi 6 novembre 2006 Statut Membre Dernière intervention 12 mai 2013 1
23 mars 2007 à 12:34
merci mes amis de votre aide
0
Rejoignez-nous