关于java.util.scanner:Java Scanner hasNextLine返回false

Java Scanner hasNextLine returning false

这可能是由于我对代码的熟悉程度高于其他任何原因,但我仍然遇到以下问题:

我有一个空行的文本文件和一个遍历该文件的扫描程序。

当我使用.hasNextLine()方法时,即使文件中有更多行,它也会返回false。 我必须指出,文件以空行开头,文本内部的空行更多,最后以空行结束。

但不管线条是否有文字,它都不应该返回真实的吗?


是的,它应该。

试试这个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static void main(String[] args){
    Test t = new Test();
    t.testHNL(new File("test.txt"));
}

public void testHNL(File f){
    try {
        Scanner s = new Scanner(new FileInputStream(f));
        while(s.hasNextLine()){
            System.out.println("There is another line!  ::"+s.nextLine());
        }
        System.out.println("There are no more lines :'(");
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}

确保文件"text.txt"存在,并且只有回车符。 然后运行它。


使用.hasNext()方法而不是使用.hasNextLine()方法。
您遇到了问题,因为只有当下一行中包含某些内容时,.hasNextLine()方法才会返回true。 而.hasNext()方法返回true,即使下一行中有任何标记(此处标记为下一行的
)


从SUNs(oracles?)1.5 JDK的源代码中,与下列正则表达式匹配的任何内容都被视为"行"。 这包括Windows或linux / unix下的空行。

1
2
3
4
5
6
private static final String LINE_SEPARATOR_PATTERN =
   "

|[

\u2028\u2029\u0085]"

所以它应该返回true,即使行是空的,除了回车。