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

Messages postés
292
Date d'inscription
lundi 6 novembre 2006
Dernière intervention
12 mai 2013
- - Dernière réponse : ulysse00
Messages postés
292
Date d'inscription
lundi 6 novembre 2006
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 -->
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Dernière intervention
26 juillet 2013
38
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 114 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Ombitious_Developper
Messages postés
546
Date d'inscription
lundi 10 mai 2004
Dernière intervention
28 septembre 2011
4
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 114 internautes nous ont dit merci ce mois-ci

Commenter la réponse de gmi19oj19
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Dernière intervention
26 juillet 2013
38
0
Merci
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."
Commenter la réponse de Ombitious_Developper
Messages postés
292
Date d'inscription
lundi 6 novembre 2006
Dernière intervention
12 mai 2013
1
0
Merci
merci mes amis de votre aide
Commenter la réponse de ulysse00

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.