Problèmes avec mon programme impliquant ArrayLists, BufferedReader, méthodes et forgetfullness globale du fonctionnement de Java
-
04-10-2019 - |
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
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).