我的输入txt文件包含以下内容:
aa1 aa2
bb1 bb2
cc1 cc2
在光标到达最后一行之后,hasNextLine()方法在读取cc1和cc2时如何赋予真?我以为我只会得到aa1到bb2。
输出:
aa1
aa2
BB1
BB2
CC1
CC2
package test;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Test {
public static void main(String[] args) throws FileNotFoundException {
File f = new File("K:\\Test\\a.txt");
System.out.println(f.exists());
Scanner reader = new Scanner(f);
while (reader.hasNextLine()) {
System.out.println(reader.next());
}
}
}
答案 0 :(得分:0)
使用hasNextLine()和nextLine(),或者使用hasNext()和next()。混合这些可能导致不希望的行为(除非故意使用)。查看他们的文档here。引用next()方法:
如果匹配指定的模式,则返回下一个标记。即使之前的hasNext(Pattern)调用返回true,此方法也可能在等待输入扫描时阻塞。如果匹配成功,扫描仪将超过与模式匹配的输入。
此外,在Scanner类文档中,您可以找到:
扫描程序使用分隔符模式将其输入分解为标记,分隔符模式默认匹配空格。
因此,扫描仪读取第一行,它前进到第一个分隔符(空白区域)并打印第一个部分(aa1)。然后,仍然在同一行,它打印第二部分(aa2)。然后,它移动到第二行,打印(bb1),然后打印(bb2),然后while条件为真,因为还有下一行。所以,最后,在第三行,它打印第一部分(cc1),它打印第二部分(cc2),然后停止,因为没有其他行。