Java扫描程序,定界符和行尾

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.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对象,依此类推。那不是我的问题。我试图了解为什么这段特定的代码无法按预期工作---特别是为什么文件有more行时我得到了[[less数据。

答案
最后一个hasNextInt()将读取带有回车符的元素。即元素将为3 。显然不是int,因此它将无法通过测试file.hasNextInt()
另一答案
[到达第1行的末尾,即在值3之后,有一个不是整数的'返回字符'。从此开始,对hasNextInt()的测试开始失败。因此它最多只能打印3个。即1 2 3

以上是关于Java扫描程序,定界符和行尾的主要内容,如果未能解决你的问题,请参考以下文章

shell 脚本对编码和行尾敏感吗?

Eclipse快捷方式到行尾和行尾

sublime text里怎么使光标跳至行尾和行首,快捷键怎么用

sublime text里怎么使光标跳至行尾和行首,快捷键怎么用

Git diff -w 仅在行首和行尾忽略空格

Vim快速移动光标至行首和行尾