【问题标题】:Java Scanner hasNextLine returning falseJava Scanner hasNextLine 返回 false
【发布时间】:2011-07-15 17:06:10
【问题描述】:

这可能更多是因为我对代码不熟悉,但我一直遇到以下问题:

我有一个包含空行的文本文件和一个扫描文件的扫描仪。

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

但是不管行是否有文本,它不应该返回true吗?

【问题讨论】:

  • 我的水晶球说你在代码中做错了什么,但是我的洞察力太弱了,没有代码就无法注意到确切的失败,对不起:p

标签: java java.util.scanner


【解决方案1】:

是的,应该的。

试试这个:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-30
        • 2013-03-28
        • 1970-01-01
        • 1970-01-01
        • 2011-12-19
        • 1970-01-01
        • 1970-01-01
        • 2021-06-10
        相关资源
        最近更新 更多