1

入力ファイルの次の行に文字列がある間にループしようとしていますが、エラーが発生します。理由はありますか?

while( !((input = in.nextLine()).equals(""))){
   ...
}

出力:

Enter file name: input1.txt
evil live
Exception in thread "main" This is a palindrome
level
This is a palindrome
dog
Not a palindrome
java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Scanner.java:1516)
    at Palindrome.main(Palindrome.java:41)
4

8 に答える 8

3

空行を提供せずに入力が終了する可能性があるため、コードは正しくありません。空であることを確認する前に、行が使用可能かどうかを確認する必要があります。

while(in.hasNextLine() && !((input = in.nextLine()).equals(""))){
    ...
}
于 2012-10-16T15:30:25.980 に答える
2

ファイルの終わりの後に行はありません。最後の行が読み取られると、次の呼び出しnextLine()は失敗します。hasNextLine()これを防ぐために使用します。

于 2012-10-16T15:30:25.180 に答える
1

ループのセットアップ方法では、ファイルの最後に到達する前に "" 文字列に到達することはありません。それは次のようなものでなければなりません

while (input.hasNextLine()) {
    ...
}

これは、ファイルに次の行がなくなるまで続行することを意味します。

于 2012-10-16T15:30:48.990 に答える
1

比較しnullてチェックするEnd-Of-File

なので

  while(((input = in.nextLine())!= null) && !(input.equals(""))){

または試してください:

  while(in.hasNextLine(){
       input = in.nextLine();
        if(input != null && !(input.equals(""))){
          ........
        }
  }
于 2012-10-16T15:30:58.003 に答える
1

in.nextLine()inputはおそらく、呼び出しようとしている に割り当てられている null を返しますequals

hasNextLine(ドキュメントはこちら) を使用して、次の行を取得できることを確認してください。

于 2012-10-16T15:29:59.460 に答える
0

必要に応じて例外をキャッチして、このタイプのものを使用してみてください。

input = in.nextLine();
while( !(input.equals(""))){
...
}

エラーが発生した場合は、try...catch ループを設定します。

于 2012-10-16T15:33:16.740 に答える
0

必要かもしれませんが、

while(in.hasNextLine()){
    input = in.nextLine();
}
于 2012-10-16T15:35:23.327 に答える
0

入力がなくなると、スキャナーは例外をスローします。長さゼロの文字列が返されると考えているようです。

一度に 1 行ずつファイルを読み取るために Scanner を使用していますか? それはそのためではありません。BufferedReader を見たいと思うかもしれません。

于 2012-10-16T15:37:53.623 に答える