这可能是由于更多的我缺乏的代码比什么都熟悉的,但我一直有以下问题:Java的扫描仪hasNextLine返回false
我有了空行的文本文件,以及扫描仪通过该文件。
当我使用.hasNextLine()方法时,即使文件中有更多行,它也会返回false。我必须指出,文件以空行开始,里面的文本之间有更多的空行,最后以空行结束。
但不应该返回true,无论行是否有文本?
这可能是由于更多的我缺乏的代码比什么都熟悉的,但我一直有以下问题:Java的扫描仪hasNextLine返回false
我有了空行的文本文件,以及扫描仪通过该文件。
当我使用.hasNextLine()方法时,即使文件中有更多行,它也会返回false。我必须指出,文件以空行开始,里面的文本之间有更多的空行,最后以空行结束。
但不应该返回true,无论行是否有文本?
是的,它应该。
试试这个:
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” 的存在,并在它只是回车。然后运行这个。
取自SUN的源代码(ORACLE?)1.5 JDK,任何符合以下正则表达式的东西都被视为“行”。这包括Windows或linux/unix下的空行。
private static final String LINE_SEPARATOR_PATTERN =
"\r\n|[\n\r\u2028\u2029\u0085]"
所以它应该返回true,即使行是空的,除了回车。
使用.hasNext()
方法而不是使用.hasNextLine()
方法。 您遇到问题了,因为.hasNextLine()
方法仅在下一行中包含某些内容时才返回true。而.hasNext()
方法返回true,即使有任何令牌在下一行(这里的令牌为\n
为下一行)
我的水晶球说你在代码中做错了什么,但那么我的透视力量是如果没有代码,太弱了以至于没有注意到确切的失败,对不起:p – Voo