这可能更多是由于我对代码的熟悉程度高于其他任何原因,但我仍然遇到以下问题:
我有一个空行的文本文件,以及一个遍历文件的扫描程序。
当我使用.hasNextLine()方法时,即使文件中有更多行,它也会返回false。我必须指出文件以空行开头,文本里面的空行更多,最后以空行结束。
但不管线条是否有文字,它都不应该返回真实状态吗?
答案 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
)