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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| public class Recherche{
/**
* @param path chemin du fichier
* @param lignesLues une liste qui permet de récupérer les lignes lues
* @param recherche chaine à rechercher
* @return numéro de la première ligne qui contient la chaine cherchée, ou 0 si la chaine n'a pas été trouvé
*/
public static int recherche(String path, List<String> lignesLues, String recherche) {
int premiereLigne=-1; // valeur résultat à retourner à l'appelant, si on trouve la seconde ligne qui contient la chaine à rechercher
boolean debutTrouve=false; // permet de détermine qu'on a trouvé la première ligne contenant la chaine à rechercher,
boolean finTrouve=false; // permet de détermine qu'on a trouvé la seconde ligne contenant la chaine à rechercher, donc la dernière ligne à extraire
try ( BufferedReader br = new BufferedReader(new FileReader(path)) ) { // on ouvre le fichier (et on le ferme automatiquement à la fin du try - ici structure try-with-resource)
int nbLignesLues=0; // permet de compter les lignes lues
String line; // permet de lire chaque ligne
while (((line = br.readLine()) != null) && !finTrouve ) { // tant qu'on lit des lignes, et qu'on a pas trouver la fin
nbLignesLues++; // on compte la ligne qu'on lit dans cette itération
if ( line.indexOf(recherche) != -1) { // si la ligne contient la chaine à rechecher...
if ( debutTrouve ) { // si on a déjà trouvé la chaine à chercher, alors on est à la fin
finTrouve = true; // on note qu'on a trouvé la fin
}
else {
debutTrouve = true; // alors on note qu'on a trouvé la chaine, et qu'on est au début de la liste de lignes à extraires
premiereLigne=nbLignesLues; // on en profite pour stocker le numéro de la première ligne
}
}
else if ( debutTrouve ) {
// sinon et si on a trouvé la chaine à rechercher, on stocke la ligne lue
lignesLues.add(line);
}
}
} catch(FileNotFoundException e) {
e.printStackTrace();
} catch(IOException ioe) {
ioe.printStackTrace();
}
if ( finTrouve ) { // si on a trouvé ce qu'on cherchait
return premiereLigne; // on retourne le numéro de la ligne qui contenait ce qu'on cherchait
}
else {
return 0; // on retourne 0 si on trouve pas la chaine cherchée
}
}
public static void main(String[] args) {
// exemple d'appel
List<String> lignes = new ArrayList<>();
int ligneLue = recherche("temp.txt", lignes, "chaine");
if ( ligneLue>0 ) {
System.out.printf("La chaine a été trouvée en %d et en %d%n", ligneLue, ligneLue + lignes.size() + 1);
System.out.println("Et voici les lignes entre les deux lignes qui contiennent la chaine recherchée : ");
int noLigne = ligneLue+1;
for(String ligne : lignes) {
System.out.printf("[%d] %s%n", noLigne, ligne);
noLigne++;
}
}
else {
System.out.println("Chaine non trouvée");
}
}
} |
Partager