Java扫描程序、分隔符和行尾
我有一个数据文件,在多个连续的行上用斜杠分隔整数。Java扫描程序、分隔符和行尾,java,Java,我有一个数据文件,在多个连续的行上用斜杠分隔整数。 下面是我想用来阅读和打印所有这些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.useDe
下面是我想用来阅读和打印所有这些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如下所示:
1/2/3
4/5/6
1
2
1/2/3
1
2
3
数据文件1的输出如下所示:
1/2/3
4/5/6
1
2
1/2/3
1
2
3
数据文件2如下所示:
1/2/3
4/5/6
1
2
1/2/3
1
2
3
数据文件2的输出如下所示:
1/2/3
4/5/6
1
2
1/2/3
1
2
3
有人能解释我为什么会有这种行为吗?特别是,为什么第一个示例忽略第一行数据末尾的“3”
注意:我知道几种“更好”的方法来获得我想要的行为:一次读取整行并使用split()和parseInt(),一次读取整行并将其转换为单独的Scanner对象,等等。。这不是我的问题。我试图理解为什么这段代码不能按预期工作,尤其是为什么当文件有更多行时,我得到的数据更少。最后一个
hasnetint()
将读取带有回车符的元素。i、 e元素将为3\r\n
。它显然不是int,因此当它到达第1行末尾(即在值3之后)时,它将无法通过测试file.hasNextInt()
,返回字符不是整数。您对hasNextInt()的测试从此开始失败。所以它最多只能打印3张。i、 e 1 2 3第1行末尾的hashasNextInt()
将返回一个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第一个文件中的下一项是“3\n4”,它不是int(因此我假设hasNextInt返回false)。分隔符用于分割输入。通过使用
/
您不再拆分空白,因此第一个文件实际上有一个1
、2
、3\n4
等输出。我将通过#nextLine读取整行内容,并使用字符串#split调用来获取所有整数