Rechercher une phrase dans un fichier txt

beegees
Rechercher une phrase dans un fichier txt

Bonjour tout le monde,

J'essaie de voir si une partie de phrase se trouve dans un fichier txt, si tel est le cas, j'incrémente i de 1.

ça fonctionne très bien quand la phrase recherchée est présente dans le fichier txt et donc trouvée mais quand la phrase n'est pas dans le fichier txt, j'obtiens une erreur :

Quote:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String ind
ex out of range: 8
at java.lang.String.substring(String.java:1441)
at ExFile2.main(ExFile2.java:16)
Press any key to continue...

Voici mon code :

import java.io.*;
public class ExFile2 
{
	public static void main (String [] args) throws IOException
	{
		File f = new File ("c:\\bidon.txt");
		FileReader fr = new FileReader(f);
		BufferedReader br = new BufferedReader(fr);
		
		String ARechercher = "SET PATH";
		
		String ligne ="";
		int i=0;
		while((ligne=br.readLine())!=null)
		{
			if (ligne.substring(0,8).equals(ARechercher))
			{
				i++;
			} 
			
		}
		
		System.out.println("i vaut "+i);
		
		br.close();
		
	}
}

Merci d'avance pour votre aide.

beegees

K-lo

Es-tu sur que l'erreur n'est pas du fait que la ligne testé fait moins de 8 (ou 9 plutôt?) caractère ?
Car l'erreur indiquer semble venir d'un problème avec l'utilisation de la fonction substring.
Donc dabors tester si la longueur de la ligne testée est >= à la longueur de la chaine recherchée

while((ligne=br.readLine())!=null)
      {
         if(ligne.length()>=ARechercher.length())
         {
             if (ligne.substring(0,8).equals(ARechercher))
             {
              i++;
             }
         }
      } 

Bon y a sans doute plus propre mais ça devrait éviter de faire une erreur d'accès mémoire

beegees

Salut,

Merci pour ta réponse.

Le problème doit provenir de là.

Masi c'est quand même étrange car la ligne qui est vérifiée est supérieur à 8 caractères.

Est-ce qu'il ne vérifie pas une ligne blanche ?

En tout cas, je vais utiliser ton test, merci encore.

beegees

K-lo

Bah affiche avant ton test chaque ligne (avec décoration pour répérer les lignes blanches) pour pouvoir vérifer le comportement de ton programme :wink: