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

ulysse00 292 Messages postés lundi 6 novembre 2006Date d'inscription 12 mai 2013 Dernière intervention - 22 mars 2007 à 19:58 - Dernière réponse : ulysse00 292 Messages postés lundi 6 novembre 2006Date d'inscription 12 mai 2013 Dernière intervention
- 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 

4 réponses

Répondre au sujet
Ombitious_Developper 2333 Messages postés samedi 28 février 2004Date d'inscription 26 juillet 2013 Dernière intervention - 22 mars 2007 à 22:08
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Ombitious_Developper
gmi19oj19 546 Messages postés lundi 10 mai 2004Date d'inscription 28 septembre 2011 Dernière intervention - 22 mars 2007 à 22:24
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de gmi19oj19
Ombitious_Developper 2333 Messages postés samedi 28 février 2004Date d'inscription 26 juillet 2013 Dernière intervention - 22 mars 2007 à 22:07
0
Utile
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
ulysse00 292 Messages postés lundi 6 novembre 2006Date d'inscription 12 mai 2013 Dernière intervention - 23 mars 2007 à 12:34
0
Utile
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.