Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java扫描程序、分隔符和行尾_Java - Fatal编程技术网

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行末尾的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

第一个文件中的下一项是“3\n4”,它不是int(因此我假设hasNextInt返回false)。分隔符用于分割输入。通过使用
/
您不再拆分空白,因此第一个文件实际上有一个
1
2
3\n4
等输出。我将通过#nextLine读取整行内容,并使用字符串#split调用来获取所有整数