3 votes

Mettre un fichier texte dans une ArrayList, mais si le mot existe, il le saute.

Je suis un peu en difficulté ici, j'essaie d'ajouter chaque mot d'un fichier texte à une liste de tableaux et chaque fois que le lecteur rencontre le même mot, il le saute. (Cela a du sens ?)

Je ne sais même pas par où commencer. Je sais qu'il me faut une boucle qui ajoute le fichier texte à la liste de tableaux et une autre qui vérifie si le mot n'est pas dans la liste. Des idées ?

PS : Je viens de commencer avec Java

C'est ce que j'ai fait jusqu'à présent, je ne sais même pas si je suis sur la bonne voie

public String findWord(){
        int text = 0;
        int i = 0;
        while sc.hasNextLine()){
            wordArray[i] = sc.nextLine();
        }
            if wordArray[i].contains() {
        }
        i++;
    }

4voto

Bohemian Points 134107

A List (un ArrayList ou autre) n'est pas la meilleure structure de données à utiliser ; une Set est meilleur. En pseudo-code :

  • définir un ensemble
  • pour chaque mot
    • si l'ajout à l'ensemble renvoie false passez votre chemin
    • sinon faire ce que l'on veut avec le mot (rencontré pour la première fois)

Le site add() méthode de Set renvoie à true si l'ensemble a changé suite à l'appel, ce qui n'arrive que si le mot n'est pas déjà dans l'ensemble, car les ensembles interdisent les doublons.

0voto

tankman175 Points 33

J'ai fait un jour un programme similaire, qui lisait un fichier texte et comptait le nombre de fois où un mot apparaissait. Je commence par importer un scanner, ainsi qu'un système de fichiers (cela doit être en haut de la classe java).

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.File;
import java.io.PrintStream;
import java.util.Scanner;

vous pouvez alors créer un fichier, ainsi qu'un scanner lisant ce fichier, assurez-vous d'ajuster le chemin du fichier en conséquence. Le nouveau Printstream n'est pas nécessaire mais lorsque l'on traite une grande quantité de données, je n'aime pas déborder de la console.

public static void main(String[] args) throws FileNotFoundException {
    File file=new File("E:/Youtube analytics/input/input.txt");
    Scanner scanner = new Scanner(file); //will read from the file above
    PrintStream out = new PrintStream(new FileOutputStream("E:/Youtube      analytics/output/output.txt"));
    System.setOut(out);     
}

Après cela, vous pouvez utiliser scanner.next() pour obtenir le mot suivant et écrire quelque chose comme ceci :

String[] array=new String[MaxAmountOfWords];//this will make an array
int numberOfWords=0;  
String currentWord="";

while(scanner.hasNext()){
  currentWord=scanner.next();

  if(isNotInArray(currentWord))
  {
      array[numberOfWords]=currentWord
  }
  numberOfWords++;
}

Si vous ne comprenez pas tout cela ou si vous avez besoin de conseils supplémentaires pour progresser, faites-le moi savoir. Il est difficile de vous aider si nous ne savons pas exactement où vous en êtes...

0voto

Vous pouvez essayer ceci :

public List<String> getAllWords(String filePath){    
        String line;
        List<String> allWords = new ArrayList<String>();
        BufferedReader reader = new BufferedReader(new FileReader(new File(filePath)));
        //read each line of the file
        while((line = reader.readLine()) != null) {
            //get each word in the line
            for(String word: line.split("(\\w)+"))
                //validate if the current word is not empty
                if(!word.isEmpty())
                    if(!allWords.contains(word))
                        allWords.add(word);
            }
        }
        return allWords;
    }

0voto

HARDI Points 346

La meilleure solution est d'utiliser un ensemble. Mais si vous souhaitez toujours utiliser une liste, voici comment procéder :

Supposons que le fichier contienne les données suivantes :

Hi how are you
I am Hardi
Who are you

Le code sera :

    List<String> list = new ArrayList<>();

    // Get the file.
    FileInputStream fis = new FileInputStream("C:/Users/hdinesh/Desktop/samples.txt");

    //Construct BufferedReader from InputStreamReader
    BufferedReader br = new BufferedReader(new InputStreamReader(fis));

    String line = null;
    // Loop through each line in the file
    while ((line = br.readLine()) != null) {
        // Regex for finding just the words
        String[] strArray = line.split("[ ]");
        for (int i = 0; i< strArray.length; i++) {
            if (!list.contains(strArray[i])) {
                list.add(strArray[i]);
            }
        }
    }

    br.close();

    System.out.println(list.toString());

Si votre fichier texte contient des phrases avec des caractères spéciaux, vous devrez écrire une regex pour cela.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X