0

Scanner Class を使用して行をスキャンし、行がなくなるまでループするコードがあります。

私のコードは次のようになります。

File file = new File(filePath);

if (file.exists()) {
    Scanner s = new Scanner(file);
    String tmp = null;
    int result = 0;
    try {
        while (true) {
            tmp = s.nextLine();
            if (tmp != null && tmp.equals("")) {
                result += Integer.parseInt(tmp);
            }
            System.out.println(runSequence(Integer.parseInt(tokens[0])));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    System.out.println(result);
}

エラーが発生します

tmp = s.nextLine();

java.util.NoSuchElementException: 行が見つかりません

以前は同じコードが正常に機能していたため、これは奇妙です。

この行でエラーが発生するのはなぜですか?

編集:

私の間違いは、質問を正しく述べていませんでした。特に、try catch ブロックを while ループから除外して、行が終了したときに終了できるようにしました...私の質問は、なぜ行を読み取れないのかということです...私はtxtファイルを読むために約3〜4行を持っていますが、それは何も読んでおらず、最初の行で例外を与えています...

4

3 に答える 3

2

コーディングするより良い方法は、 Scanner#hasNextLine()を使用して while ループに条件を設定することだと思います。Scanner#hasNextLine() は、file= に行がある場合にのみ while 内のコードが実行されるようにします。

              while (s.hasNextLine()) {
                tmp = s.nextLine();
                if (tmp != null && tmp.equals("")) {
                    result += Integer.parseInt(tmp);
                }
于 2013-03-28T13:21:06.477 に答える
1
while (s.hasNextLine())  
{  
   //...  
}
于 2013-03-28T13:21:40.820 に答える
1
if (tmp != null && tmp.equals(""))

する必要があります(指定された文字列が空の文字列ではないことを確認しようとしている場合)

if (tmp != null && !tmp.isEmpty())

残りの行がなく、条件が while(true) であるファイルの最後に到達したと思うので、その時間も読み取ろうとします。したがって、 NoSuchElementException を取得します(行が見つからない場合)

whileループを次のように変更することをお勧めします

while (s.hasNextLine()){  
   tmp = s.nextLine();
   // then do something

}
于 2013-03-28T13:23:57.667 に答える