Envoyé par
chenwaZi
merci bien
.. juste une autre question, S'il vous plais, quand vous avez fait le test d’existence de mot dans la ligne ( if (motDansLaLigne.equals(mot)) ), est ce que je peux afficher la ligne qui est au dessus de la ligne où le mot existe? c-a-d dans le fichier par exemple j'ai:
1er ligne : ...je suis malade....
2eme ligne : le chat est méchant
est ce que je peu afficher "Je suis malade"
Ça n'a plus rien à voir avec la question initiale. Déjà, c'est complètement différent si on cherche qu'un seul mot, ou tous les mots, ou plusieurs mots. Pour pouvoir afficher la ligne précédente, il faut la stocker. Si on veut afficher au fur et à mesure, il suffit de la stocker dans une variable de type String.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| String lignePrecedente = null;
while ((line = inputStream.readLine()) != null) {
//System.out.println(line);
String[] motsDansLaLigne = line.split(" "); // par exemple pour découper selon les espaces (attention s'il y a de la ponctuation ça ne suffit pas)
boolean motTrouveDansLaLigne = false; // pour éviter d'afficher plusieurs fois la ligne précédente, on va utiliser un booléen qui stocke si on a trouvé le mot dans la ligne
for( String motDansLaLigne : motsDansLaLigne ) {
if ( motDansLaLigne.equals( mot ) ) { // si le mot cherché est trouvé
compteur++; // on le compte
motTrouveDansLaLigne = true; // on stocke le fait que le mot a été trouvé dans la ligne
}
}
// on a parcouru tous les mots de la ligne en cours
if ( motTrouveDansLaLigne ) {
if ( lignePrecedente==null ) {
System.out.println("1ère ligne : aucune");
}
else {
System.out.printlkn("1ère ligne : " + lignePrecedente );
}
System.out.println("2ème ligne : " + line );
}
lignePrecedente = line; // on stocke la ligne courante dans lignePrecedente pour l'itération suivante
}
} |
Pour plusieurs mots, on fait pareil. D'ailleurs je n'ai pas dit comment faire dans le message précédent : il suffit d'avoir une liste de mots (ArrayList), qu'on peut créer comme ça :
[CODE]List<String> listeMots = Arrays.asList( "chat", "poisson", "ornithorynque" );
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
while ((line = inputStream.readLine()) != null) {
//System.out.println(line);
String[] motsDansLaLigne = line.split(" "); // par exemple pour découper selon les espaces (attention s'il y a de la ponctuation ça ne suffit pas)
boolean motTrouveDansLaLigne = false; // pour éviter d'afficher plusieurs fois la ligne précédente, on va utiliser un booléen qui stocke si on a trouvé le mot dans la ligne
for( String motDansLaLigne : motsDansLaLigne ) {
if ( listeMots.contains( motDansLaLigne ) ) { // si le mot fait partie des mots à trouver
if ( map.containsKey(motDansLaLigne ) ) {
map.put( motDansLaLigne , map.get(motDansLaLigne ) + 1 ); // incrémenter le compteur
} else {
map.put(motDansLaLigne , 1 ); // initialiser le compteur
}
motTrouveDansLaLigne = true; // on stocke le fait que le mot a été trouvé dans la ligne
}
}
// on a parcouru tous les mots de la ligne en cours
if ( motTrouveDansLaLigne ) {
if ( lignePrecedente==null ) {
System.out.println("1ère ligne : aucune");
}
else {
System.out.printlkn("1ère ligne : " + lignePrecedente );
}
System.out.println("2ème ligne : " + line );
}
lignePrecedente = line; // on stocke la ligne courante dans lignePrecedente pour l'itération suivante
} |
Pour tous les mots, ça n'a pas beaucoup de sens, puisque toutes les lignes non vides sont valides : on va afficher tout le fichier, 2 lignes par 2 lignes...
Maintenant, si on veut afficher tous les résultats à la fin, sous ce genre de forme :
Le mot 'chat' a été trouvé 42 fois :
1ère ligne : ...je suis malade....
2ème ligne : le chat est méchant
1ère ligne : blah blah
2ème ligne : la mère Michèle a perdu son chat
1ème ligne : truc bidule
2ème ligne : le chat est un félin
etc.
Le mot 'poisson' a été trouvé 18 fois :
1ème ligne ...
etc.
etc.
C'est déjà beaucoup plus compliqué. Il faudrait stocker des couples de lignes (1ème, 2ème), dans une liste, elle même stockée dans un map associée au mot. Ou alors, avoir une classe par mot, qui contient une liste de couple de ligne, et le compte de mots).
Éventuellement, on peut stocker toutes les lignes dans une liste, et les couples de lignes, sont des couples d'index de ligne (des int).
Partager