Rechercher le nombre d'occurence dans une phrase avec indexOf()

Signaler
Messages postés
93
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
6 janvier 2012
-
Messages postés
110
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
28 août 2012
-
Bonjour tout le monde,

Est-il possible de rechercher le nombre d'occurence d'un mot dans une phrase avec indexOf ?

J'ai par exemple la variable phrase dont la valeur est "to be or not to be" et le mot recherché "to".

phrase.indexOf(mot) ne fonctionne pas, je présûme donc que ce n'est pas la bonne méthode.

Auriez-vous une idée ?

Merci d'avance.

14 réponses

Messages postés
2116
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
10
biensurs que si!! cela fonctionne..

tu dois aussi pouvoir le faire avec les expression reguliere

mais la methode indexof emploié dans une boucle te le permet ....

GodConan ;o)
Messages postés
93
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
6 janvier 2012

Merci pour ta réponse GodConan,


indexOf() renvoi zéro si il trouve quelque chose ou -1 quand le mot n'est pas trouvé.


Mais ce que j'aimerais, c'est le nombre d'occurence du mot dans la phrase et pas 0 ou -1.


Faudrait pas travailler avec les espaces ? on commence au début de la phrase jusqu'à un espace, ensuite on check si equalsTo le mot recherché, si c'est le cas, on incrémente i de 1.


Mais c'est des écrits, reste à faire la pratique.


qu'en penses-tu ?


 
Messages postés
2116
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
10
il te renvoi 0 car il a trouvé to à la position 0 dans la string .. il te faut ensuite refaire la recherche sur le reste de la chaine..

tu peu aussi utiliser la class StringTokenizer je pense....  ;o)

GodConan ;o)
Messages postés
694
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
8 janvier 2014
13
/* avec les pattern */
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class regexto{
    /**
     * @param args
     */
    private static final Pattern TO = Pattern.compile("(to)");
    
    public static void main(String[] args){
        String test = "to be or not to be";
        Matcher m = TO.matcher(test);
        if (m.find()) {
            int times = 1;
            while (m.find()) times++;
            System.out.println("j'ai trouvé : " + times + " fois le mot 'to'");
        }
    }
}
Messages postés
2116
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
10
Vi voila ;o) avec les expression reguliere c est mieu.... ;o)

GodConan ;o)
Messages postés
93
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
6 janvier 2012

Salut,

Je ne peux malheureusement pas utiliser ce genre de librairie.

Je dois me limiter pour cet exercice au substring(), charAt(), indexOf()...
Messages postés
2116
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
10
;o) ben c est pas compliquer tu fais une boucle while
String taString = "ton truc à tester";
int occurence = 0;
int idx = taString.indexOf( "ta string rechercher" );
while( idx >= 0  ) 
{
occurence ++;
taString = taString.subString( idx + "ta string rechercher".length() );
idx = taString.indexOf( "ta string rechercher" );
}

au erreur de sintax pret tu as la solution ...
tache de le presenter correctement .... ;-( faut tout vous donner ;o)

GodConan ;o)
Messages postés
93
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
6 janvier 2012

Salut Conan,<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>






 






Voici ce que j’ai fait, je me suis basé en partie sur tes suggestions, je te remercie pour ton aide.






 






J’ai un seul problème avec ce code, c’est que lorsqu’on analyse le dernier mot, position retourne -1 et émet un message d’erreur :






 






Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String <?xml:namespace prefix st1 ns "urn:schemas-microsoft-com:office:smarttags" /??><st1:place w:st="on"><st1:state w:st="on">ind</st1:state></st1:place>





ex out of range: -1






        at java.lang.String.substring(String.java:1444)






       

at Jean3b.methode(Jean3b.java:36)






        at Jean3b.main(Jean3b.java:19)





Press any key to continue...






 






Voici mon code :






 







public class Jean3b







{








            public static void main (String [] args)








            {








                        String phrase = "";








                        String recherche ="";








                        String caractere = " ";








                       
int position = 0;






                        int nbFois;






                        String motActuel ="";






                        int taille;






                       








                        System.out.println("Veuillez entrer une phrase");






                        phrase = Clavier.lireString();






                        System.out.println("Quel mot voulez vous chercher ?");






                        taille = phrase.length();






                        recherche = Clavier.lireString();






                       








                        nbFois = methode(phrase, recherche, caractere, position, motActuel, taille);






                       








                       








                       








            }






           








            public static int methode(String phrase, String recherche, String caractere, int position,String motActuel,int taille)






            {






                        int occurences = 0;






                        String sansEspace ="";






                       








                        while(taille>0)






                        {






                                   position = phrase.indexOf(caractere);






                       








                        System.out.println("position vaut " + position);






                       








                        motActuel = phrase.substring(0,position);






                       








                        System.out.println("motActuel vaut " + motActuel);






                        if (recherche.equals(motActuel))






                        {






                                   occurences++;






                                   System.out.println("le mot recherche est egal au mot actuel, occurences vaut donc" + occurences);






                        }






                        else






                        {






                                   System.out.println("le mot recherche est " + recherche);






                                   System.out.println("le mot trouve est " + motActuel + " le mot n'est donc pas le meme");






                        }






                       








                        phrase = phrase.substring(position);






                        sansEspace = phrase.trim();






                        phrase = sansEspace;






                        System.out.println("phrase vaut maintenant (sans espace)" + phrase);






                        taille = phrase.length();         






                        }






                       








                       








                        return occurences;






            }





}





 Et voici le résultat de la console de commande :



 




Veuillez entrer une phrase


merci pour tout


Quel mot voulez vous chercher ?


tout


position vaut 5


motActuel vaut merci


le mot recherche est tout


le mot trouve est merci le mot n'est donc pas le meme


phrase vaut maintenant (sans espace)pour tout


position vaut 4


motActuel vaut pour


le mot recherche est tout


le mot trouve est pour le mot n'est donc pas le meme


phrase vaut maintenant (sans espace)tout



position vaut -1





Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String <st1:state w:st="on"><st1:place w:st="on">ind</st1:place></st1:state>





ex out of range: -1






        at java.lang.String.substring(String.java:1444)






       
at Jean3b.methode(Jean3b.java:36)



        at Jean3b.main(Jean3b.java:19)



Press any key to continue...






 






Qu’en penses-tu (vous) ?






 





Merci d’avance pour l’aide.



 





 David
Messages postés
93
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
6 janvier 2012

Re,

je met

if (position <0)
position = 0

Mais ça fonctionne pas, ça devrait fonctionner pourtant ?

David
Messages postés
2116
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
10
ben le probleme c est que tu ne fais pas du tout la meme chose ;o) ...
et de plus ton code ne correspond pas a ce que tu as demander au début...
moi ! j ai strictement repondu à ta demande de départ...
ce que tu veux semble etre autre chose !!!

donc si tu veux parser chaque mot inspire toi de mon exemple en utilisant " " pour separer les mots et ensuite en comparant chaque mot à la sequence que tu veux pour envoyer les comportement voulu à la console ....

GodConan ;o)
Messages postés
93
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
6 janvier 2012

OK GodConan,

Je vais analyser ton code de plus près.

De mon côté, ça fonctionne très bien.

Petite question pratique :

y'a-t'il moyen d'éditer un message sur ce forum ??
Messages postés
2116
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
10
je ne croi pas!! peu etre les membre ou les admin!!?

GodConan ;o)
Messages postés
2
Date d'inscription
mercredi 27 janvier 2010
Statut
Membre
Dernière intervention
27 novembre 2010

je veu chercher le nbre d'occurrences et la position d'une chaine de caractere(un mot séparer par deux espaces)dans un texte sous netbeans.?
Messages postés
110
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
28 août 2012
1
Hello,

Petit exemple vite fait :

public class Jean3b {
public static void main(String[] args) {
String phrase = "";
String recherche = "";
int nbFois;

System.out.println("Veuillez entrer une phrase");
phrase = Clavier.lireString();
System.out.println("Quel mot voulez vous chercher ?");
recherche = Clavier.lireString();

nbFois = methode(phrase, recherche);
System.out.println("Le mot " + recherche + " est contenu " + nbFois + " fois dans la phrase " + phrase);

}

public static int methode(String phrase, String recherche) {
int occurences = 0;
int position = 0;

while (phrase.length() > 0) {
position = phrase.indexOf(recherche, position);
if (position != -1) {
position = position+ recherche.length();
phrase = phrase.substring(position, phrase.length());
occurences++;
} else {
return occurences;
}
}

return occurences;
}

}


A +,

amundain

Java bien,merci.