Java扫描程序、分隔符和行尾



我有一个数据文件,在多个连续的行上有斜杠分隔的int
这里有一小段代码,我想用它来阅读和打印所有这些int:

import java.util.Scanner;
import java.io.File;
class Testing {
public static void main (String[] args) throws Exception {
Scanner file = new Scanner(new File("data.txt"));
file.useDelimiter("/");
while (file.hasNextInt())
System.out.println(file.nextInt());
}
}

数据文件一看起来像这样:

1/2/3
4/5/6

数据文件的输出如下:

1
2

数据文件二如下所示:

1/2/3

数据文件二的输出如下:

1
2
3

有人能解释一下我为什么会有这种行为吗?特别是,为什么第一个例子忽略了第一行数据末尾的"3"?

注意:我知道几种"更好"的方法来获得我想要的行为:一次读取整行并使用split((和parseInt((,一次读取整行并将其变成一个单独的Scanner对象,等等。这不是我的问题。我试图理解为什么这段特定的代码不能按预期工作——特别是,当文件有更多行时,为什么我得到的数据更少。

最后一个hasNextInt()将读取带有回车符的元素。即该元素将是CCD_ 2。这显然不是int,因此它将无法通过测试file.hasNextInt()

当它到达第1行的末尾时,即在值3之后,有一个不是整数的"返回字符"。从此以后,您对hasNextInt((的测试开始失败。所以它只打印3个。即1 2 3

行末尾的has一个hasNextInt()将返回一个false,因为它返回3\r\n,因此会导致问题。

简单的解决方案可以是-

public static void main (String[] args) throws Exception {
Scanner file = new Scanner(new File("test.txt"));
file.useDelimiter("/");
while (file.hasNext())
System.out.println(file.next());
}

输出现在看起来像-
1
2
3
4
5
6

最新更新