2011-07-15 65 views
2

这可能是由于更多的我缺乏的代码比什么都熟悉的,但我一直有以下问题:Java的扫描仪hasNextLine返回false

我有了空行的文本文件,以及扫描仪通过该文件。

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

但不应该返回true,无论行是否有文本?

+11

我的水晶球说你在代码中做错了什么,但那么我的透视力量是如果没有代码,太弱了以至于没有注意到确切的失败,对不起:p – Voo

回答

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

取自SUN的源代码(ORACLE?)1.5 JDK,任何符合以下正则表达式的东西都被视为“行”。这包括Windows或linux/unix下的空行。

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

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

1

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