Проблемы с моей программой, связанной с арайлистами, буферреджером, методами и общим забывчивостью того, как работает Java
-
04-10-2019 - |
Вопрос
У меня есть трудности с программой, которую я работаю на весь день. Я пытаюсь прочитать текстовый файл и прочитать каждую строку один за раз. Возьмите эту линию и сделайте арайлистом слов линии. Затем используя индекс ArrayList определить термины с ним.
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;
}
}
Ошибка, которую я получаю, это только читает первую строку. Что я делаю неправильно? Огромное спасибо заранее
Решение
У вас есть «возвратные токены»; в твоей петле. Похоже, что раннее возвращение будет эффективно отключить обработку на первой строке.
Другие советы
Попробуйте изменить свой цикл к следующему. Обратите внимание, как я перевел оператор возврата.
while ((l = inputStream.readLine()) != null) {
Scanner tokenize = new Scanner(l);
while (tokenize.hasNext()) {
tokens.add(tokenize.next());
}
}
return tokens; // <-- outside the loop
Редактировать: Если вы хотите прочитать весь файл и хранить токены каждой строки в отдельном массиве, вы можете создать ArrayList
из 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;
}
Примечание: моя Java ржавая.
Упростить это ...
String l;
while ((l = inputStream.readLine()) != null) {
tokens.addAll(Arrays.asList(l.split(" ")));
}
... Создает список всех токенов на всех строках в файле (если это то, что вы хотите).