NoSuchElementException が発生する理由がわかりません。私が読んでいるファイルは LF で終了しており、このコードは本番環境で 1 年間実行されています。私の同僚は、デバッグの過程で、ファイルが LF で終わり、正確に 1025 文字の長さである場合にエラーを再現できることを発見しました (元のファイルの長さは 10132 文字ですが)。このエラーは Linux と Windows の両方で再現可能で、JDK 1.6.0_30、JRE 1.7、および JDK 1.7.0_07 を試しました。パターンを「~$?」に変更すると または「~\r?\n?」エラーはなくなりました。
public static void main(String[] args) throws FileNotFoundException {
String filepath = "file.txt";
Scanner s = null;
try {
s = new Scanner(new File(filepath));
s.useDelimiter(Pattern.compile("~\n?", Pattern.UNIX_LINES));
while (s.hasNext()) {
System.out.println(s.next());
}
} finally {
if (s != null)
s.close();
}
}
任意の提案をいただければ幸いです。
ありがとうございました!
編集 1 Scanner
の GNU Classpath 実装を試してみましたが、そのバージョンの Scanner は問題なく動作します。