为什么我会收到 InputMismatchException with?

Why am I getting an InputMismatchException with?

提问人:Voyex 提问时间:4/4/2020 更新时间:4/4/2020 访问量:62

问:

我在 java 中创建了一个 Scanner 来读取有关城市的数据文件。该文件的格式如下:

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

在读取文件时,我在扫描每行上的最后一项时收到 InputMismatchException(此项必须是 int)。

public void fileScanner(File toScan) throws FileNotFoundException {
            Scanner sc = new Scanner(toScan);
            sc.useDelimiter(",");
            System.out.println(sc.next());
            System.out.println(sc.nextInt());
            System.out.println(sc.nextInt());

有什么想法吗?我想这与我使用“,”分隔符有关。

java 文件-io java.util.scanner

评论


答:

1赞 Trishul Singh Choudhary 4/4/2020 #1

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

如果你使你的数据如下所示,你的代码会很好用。

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

我还看到没有循环来读取所有数据。您的代码将只读取第一行。

评论

0赞 Voyex 4/5/2020
我认为数据必须采用这种格式。该代码只是一个示例,用于显示我正在尝试执行的操作。在我的完整实现中,我使用了 while 循环来确定扫描仪是否有更多的输入。
3赞 backdoor 4/4/2020 #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