Problèmes avec mon programme impliquant ArrayLists, BufferedReader, méthodes et forgetfullness globale du fonctionnement de Java

StackOverflow https://stackoverflow.com/questions/3748350

Question

J'ai des difficultés avec un programme que je travaille toute la journée. Je suis en train de lire un fichier texte et lire chacune des lignes à la fois. Prenez cette ligne et faire une arraylist des mots de la ligne. puis en utilisant l'index de la arraylist définir les termes avec elle.

public class PCB {

    public static void main(String arg[]) {
        read();
    }

    public static ArrayList read() {    
        BufferedReader inputStream = null;
        ArrayList<String> tokens = new ArrayList<String>();
        try {
            inputStream = new BufferedReader(new FileReader("processes1.txt"));

            String l;
            while ((l = inputStream.readLine()) != null) {
                Scanner tokenize = new Scanner(l);
                while (tokenize.hasNext()) {
                    tokens.add(tokenize.next());
                }
                return tokens;
            }
        } catch (IOException ioe) {
            ArrayList<String> nothing = new ArrayList<String>();
            nothing.add("error1");
            System.out.println("error");
            //return nothing;
        }
        return tokens;
    }
}

L'erreur que je reçois est-il ne lit que la première ligne. Qu'est-ce que je fais mal? Merci beaucoup à l'avance

Était-ce utile?

La solution

Vous avez des « jetons de retour; » dans votre boucle while. On dirait que le remboursement anticipé serait effectivement coupé le traitement sur la première ligne.

Autres conseils

Essayez de changer votre boucle à la suivante. Notez comment je me suis déplacé la déclaration de retour.

while ((l = inputStream.readLine()) != null) {
    Scanner tokenize = new Scanner(l);
    while (tokenize.hasNext()) {
        tokens.add(tokenize.next());
    }
}
return tokens; // <-- outside the loop

Edit:. Si vous voulez lire le fichier entier et stocker les jetons de chaque ligne dans un tableau séparé, vous pouvez alors créer un ArrayList de ArrayList

public static ArrayList<ArrayList<String>> tokenizeFile(string filename) {    
    BufferedReader inputStream = new BufferedReader(new FileReader(filename));
    ArrayList<ArrayList<String>> lines = new ArrayList<ArrayList<String>>();

    while (true) {
        String line = inputStream.readLine();
        if (line == null) break;

        ArrayList<String> tokens = new ArrayList<String>();
        Scanner tokenizer = new Scanner(line);
        while (tokenizer.hasNext()) {
            tokens.add(tokenizer.next());
        }
        lines.Add(tokens);
    }
    return lines;
}

Remarque:. Mon Java est rouillé

Simplifier à cette ...

        String l;
        while ((l = inputStream.readLine()) != null) {
            tokens.addAll(Arrays.asList(l.split(" ")));
        }

... crée une liste de tous les jetons sur toutes les lignes du fichier (si c'est ce que vous voulez).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top