web-dev-qa-db-fra.com

Rechercher une chaîne (ou une ligne) dans un fichier texte Java

disons que j'ai un fichier txt contenant:

john
dani
zack

l'utilisateur entrera une chaîne, par exemple "omar" Je veux que le programme recherche dans ce fichier txt la chaîne "omar". S'il n'existe pas, affiche simplement "n'existe pas".

J'ai essayé la fonction String.endsWith () ou String.startsWith (), mais celle-ci affiche bien sûr "n'existe pas" 3 fois.

J'ai commencé Java il y a seulement 3 semaines, donc je suis un débutant total ... s'il vous plait, gardez avec moi ... Merci.

9
user3040333

Il suffit de lire ce fichier texte et de placer chaque mot dans une variable List et de vérifier si cette variable List contient votre mot. 

Vous pouvez utiliser Scanner scanner=new Scanner("FileNameWithPath"); pour lire le fichier et essayer de suivre pour ajouter des mots à List.

 List<String> list=new ArrayList<>();
 while(scanner.hasNextLine()){
     list.add(scanner.nextLine()); 

 }

Alors vérifiez que votre Parole est là ou pas

if(list.contains("yourWord")){

  // found.
}else{
 // not found
}

BTW vous pouvez rechercher directement dans le fichier aussi. 

while(scanner.hasNextLine()){
     if("yourWord".equals(scanner.nextLine().trim())){
        // found
        break;
      }else{
       // not found

      }

 }

utilisez String.contains(your search String) au lieu de String.endsWith() ou String.startsWith()

par exemple

 str.contains("omar"); 
1
Prabhakaran

Vous pouvez aller autrement. Au lieu d'imprimer 'n'existe pas', print 'existe' si une correspondance est trouvée lors de la traversée du fichier et de la rupture; Si l'intégralité du fichier est parcourue et qu'aucune correspondance n'a été trouvée, affichez alors «n'existe pas».

Utilisez également String.contains() à la place de str.startsWith() ou str.endsWith(). La vérification de contenu contient une correspondance dans toute la chaîne et pas seulement au début ou à la fin.

J'espère que cela a du sens.

1
Ankur Shanbhag

Vous pouvez le faire avec Files.lines :

try(Stream<String> lines = Files.lines(Paths.get("...")) ) {
    if(lines.anyMatch("omar"::equals)) {
  //or lines.anyMatch(l -> l.contains("omar"))
        System.out.println("found");
    } else {
        System.out.println("not found");
    }
}

Notez qu'il utilise le jeu de caractères UTF-8 pour lire le fichier. Si ce n'est pas ce que vous voulez, vous pouvez passer votre jeu de caractères comme second argument à Files.lines.

0
Alex

Lisez le contenu du fichier texte: http://www.javapractices.com/topic/TopicAction.do?Id=42

Et après cela, utilisez simplement la méthode textData.contains(user_input);, où textData est la donnée lue dans le fichier et le user_input la chaîne recherchée par l'utilisateur

METTRE &AGRAVE; JOUR

public static StringBuilder readFile(String path) 
 {       
        // Assumes that a file article.rss is available on the SD card
        File file = new File(path);
        StringBuilder builder = new StringBuilder();
        if (!file.exists()) {
            throw new RuntimeException("File not found");
        }
        BufferedReader reader = null;
        try {
            reader = new BufferedReader(new FileReader(file));
            String line;
            while ((line = reader.readLine()) != null) {
                builder.append(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

       return builder;
    }

Cette méthode retourne le StringBuilder créé à partir des données que vous avez lues à partir du fichier texte donné en paramètre.

Vous pouvez voir si la chaîne de saisie de l'utilisateur est dans le fichier comme ceci:

int index = readFile(filePath).indexOf(user_input);
        if ( index > -1 )
            System.out.println("exists");
0
Hitman