为了账号安全,请及时绑定邮箱和手机立即绑定

Java 扫描器、分隔符和行尾

Java 扫描器、分隔符和行尾

慕哥9229398 2023-12-13 16:40:26
我有一个数据文件,在多个连续行上有斜杠分隔的整数。这是我想用来读取和打印所有这些整数的一小段代码: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/34/5/6数据文件一的输出如下所示:12数据文件二如下所示:1/2/3数据文件二的输出如下所示:123有人可以解释为什么我会出现这种行为吗?特别是,为什么第一个示例忽略第一行数据末尾的“3”的存在?注意:我知道几种“更好”的方法来获得我想要的行为:一次读取整行并使用 split() 和 parseInt(),一次读取整行并将其转换为单独的 Scanner 对象,等等。这不是我的问题。我试图理解为什么这段特定的代码不能按预期工作——特别是,为什么当文件有更多行时我得到的数据更少。
查看完整描述

3 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

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



查看完整回答
反对 回复 2023-12-13
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

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



查看完整回答
反对 回复 2023-12-13
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

行尾旁边的 1hasNextInt()将返回 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


查看完整回答
反对 回复 2023-12-13
  • 3 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信