Compter le nombre de fois d'une chaine de caractère dans une chaine [Résolu]

Signaler
Messages postés
292
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
12 mai 2013
-
Messages postés
292
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
12 mai 2013
-
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 -->
A voir également:

4 réponses

Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
35
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
Messages postés
545
Date d'inscription
lundi 10 mai 2004
Statut
Membre
Dernière intervention
28 septembre 2011
2
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
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
35
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."
Messages postés
292
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
12 mai 2013
1
merci mes amis de votre aide