扫描仪类错误

时间:2011-11-14 03:06:20

标签: java

我正在使用Scanner类来读取文件中的数据。文件内容显示正确,但最后它会抛出java.util.NoSuchElementException错误。我在这里做错了什么?

以下是代码。

Scanner sc_file=new Scanner(new File("/host/sha.txt")).useDelimiter("\n");
while (sc_file.hasNextLine())
{
    System.out.println(sc_file.next());

}


sc_file.close();

错误堆栈

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:855)
    at java.util.Scanner.next(Scanner.java:1364)
    at basicjava.Input_output.main(Input_output.java:34)

2 个答案:

答案 0 :(得分:1)

您需要使用\r\n作为分隔符:

.useDelimiter("\r\n");

<强>更新

hasNextLine()

  

如果此扫描仪的输入中有另一行,则返回true。

next()

  

查找并返回此扫描仪的下一个完整令牌。完整的标记之前和之后是与分隔符模式匹配的输入。

所以,基本上发生的事情是,最后一行hasNextLine()返回true但不知何故最后一行似乎不以\n结尾所以它不是一个完整的标记,这就是为什么{{1投掷next()

您似乎尝试逐行读取文件(因为您使用NoSuchElementException作为\n方法的分隔符,并在您的条件中使用next()。所以,我建议尝试删除分隔符并使用nextLine()而不是hasNextLine()

next()

无论线路实际结束的是什么,基本上都会返回该线路。

答案 1 :(得分:0)

我亲自测试过。如果最后一行为空,我也会得到NoSuchElementException。所以解决方案是不要在最后有空行。请注意,设置 .useDelimiter(“\ r \ n”)仍然会导致错误。