#java #file
Вопрос:
У меня есть метод, который просматривает файл, чтобы найти количество строк.
static int findFileSize(Scanner f){
System.out.println("Got to counter:");
String str;
int line_count = 0;
while(f.hasNextLine()) {
line_count ;System.out.println(line_count);
//str = f.nextLine();
}System.out.println("File size: " line_count);
return line_count;
}//end findFileSize
Когда я не включаю str = f.nextLine();, я вижу, что он индексируется бесконечно. Что заставляет это происходить? И есть ли способ найти количество строк в файле .txt без необходимости ненужного хранения данных в строке?
Ответ №1:
Что заставляет это происходить?
Вы ничего не читаете из Scanner
, вы просто спрашиваете, сможете ли вы что-нибудь прочитать.
Если вы зайдете в магазин и спросите, есть ли у них, скажем, морковь, если ответ «да», но вы не покупаете морковь, в магазине все еще есть морковь. Поэтому, если вы выйдете и войдете, чтобы спросить еще раз, у них все равно будет морковь, поэтому они снова ответят «да» (если только их не купил кто-то другой).
Вы должны «купить морковь» с помощью f.nextLine()
.
без необходимости ненужного хранения данных в строке?
Вам не нужно хранить его в переменной:
f.nextLine();
прочитает строку и немедленно отбросит ее. Но на самом деле нет большой разницы между этим и сохранением в переменной: переменная в любом случае сохраняет только содержимое последней прочитанной строки. (Но поскольку вы не указываете str
начальное значение, оно определенно не назначается после цикла, поэтому вы в любом случае не можете прочитать его значение после цикла).