Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.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_File Io_Java.util.scanner - Fatal编程技术网

Java 为什么我会收到输入不匹配异常?

Java 为什么我会收到输入不匹配异常?,java,file-io,java.util.scanner,Java,File Io,Java.util.scanner,我用java创建了一个扫描器来读取有关城市的数据文件。文件的格式如下: Abbotsford,2310,2 Adams,1967,1 Algoma,3167,2 在读取文件时,当扫描每行的最后一项时,我会得到一个InputMismatchException(该项必须是int) 你知道为什么吗?我想这与我使用的“,”分隔符有关。您使用的分隔符是逗号(,) 系统查找下一个逗号,该逗号仅出现在Adams之后。因此,系统的输入看起来像2 Adams,这显然不是Int,而是字符串,因此输入不匹配 如果您

我用java创建了一个扫描器来读取有关城市的数据文件。文件的格式如下:

Abbotsford,2310,2
Adams,1967,1
Algoma,3167,2
在读取文件时,当扫描每行的最后一项时,我会得到一个InputMismatchException(该项必须是int)


你知道为什么吗?我想这与我使用的“,”分隔符有关。

您使用的分隔符是逗号(,) 系统查找下一个逗号,该逗号仅出现在
Adams
之后。因此,系统的输入看起来像
2 Adams
,这显然不是Int,而是字符串,因此输入不匹配

如果您将您的数据设置为如下所示,那么您的代码将运行良好

Abbotsford,2310,2,
Adams,1967,1,
Algoma,3167,2,

此外,我还发现没有读取所有数据的循环。您的代码将只读取第一行。

您只使用了一个分隔符,即
,但您的文件包含
\r
\n
,因此请尝试使用多个分隔符。另外,使用循环读取整个文件:-

Scanner sc = new Scanner(toScan);
        sc.useDelimiter(",|\\r\\n");
        while (sc.hasNext()) {
            System.out.println(sc.next());
            System.out.println(sc.nextInt());
            System.out.println(sc.nextInt());
        }
输出:-

Abbotsford
2310
2

Adams
1967
1

Algoma
3167
2

我希望数据必须是那种格式。这段代码只是一个示例,展示了我试图做的事情。在我的完整实现中,我使用了while循环来确定扫描仪是否有更多的输入。
Abbotsford
2310
2

Adams
1967
1

Algoma
3167
2