Java Scanner hasNextLine返回false

时间:2011-07-15 17:06:10

标签: java java.util.scanner

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

我有一个空行的文本文件,以及一个遍历文件的扫描程序。

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

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

3 个答案:

答案 0 :(得分:2)

是的,应该。

试试这个:

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”存在,并且只有回车符。然后运行它。

答案 1 :(得分:1)

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

private static final String LINE_SEPARATOR_PATTERN = 
    "\r\n|[\n\r\u2028\u2029\u0085]"

因此除非回车,否则它应该返回true。

答案 2 :(得分:1)

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