При разборе файла в массив инициализируется только последний элемент
Я пытаюсь получить массив слов из файла (который я написал сам). Первая строка файла говорит мне, как долго должен быть массив, но по какой-то причине инициализируется только последний элемент. Я новичок, поэтому я уверен, что это простое решение, но я просто не могу понять это...
public class WordReader {
String[] words;
public WordReader() {
String line;
String[] tokens = new String[2];
int counter = 0;
try{
File infile = new File("resources/FunnyWords.txt");
Scanner reader = new Scanner(infile);
while(reader.hasNextLine()){
line = reader.nextLine();
if (line.contains("Number of words")){
tokens = line.split(",");
continue;
}
int length = Integer.parseInt(tokens[1]);
words = new String[length];
words[counter] = line;
counter++;
}
}catch (FileNotFoundException e) {
e.printStackTrace();
}
}
Я был бы очень признателен, если бы вы могли помочь.. Спасибо!
2 ответа
Две нижеследующие строки, которые инициализируют массив, должны выполняться только один раз, а не для каждой строки / слова в файле.
int length = Integer.parseInt(tokens[1]);
words = new String[length];
Измените это как
while(reader.hasNextLine()){
line = reader.nextLine();
if (line.contains("Number of words")){
tokens = line.split(",");
int length = Integer.parseInt(tokens[1]);
words = new String[length]; //Initialize the words array
continue;
}
words[counter] = line;
counter++;
//Or a one liner - words[counter++] = line;
}
В вашем while
петля у вас есть
words = new String[length];
который создает новый String
массив в каждой итерации цикла.
Таким образом, вы фактически присваиваете каждой строке свой собственный массив и сохраняете только последнюю.