首页 > 解决方案 > 在java中执行nextInt函数时如何修复InputMismatchException

问题描述

我正在尝试通过读取带有逗号分隔数字的 txt 文件来使数独验证器工作。我的代码将第一行读入数组,然后在转到下一行时会引发 InputMismatchException 错误。我试过查找东西,但没有任何效果。这是我的代码以及 txt 输入文件包含的内容

String fileName = "data/sudoku-valid-1.txt";
    Scanner s = null;
    try {
        s = new Scanner(new File(fileName));
        s.useDelimiter(",");

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

    int array[][] = new int[9][9];
    int i, j;
    while(s.hasNext()) {
        for(i=0; i<9; i++) {
            for(j=0; j<9; j++) {
                array[i][j] = s.nextInt();
            }
        }
    }

文本文件:

1,5,7,9,8,3,6,2,4,

2,6,8,7,5,4,9,3,1,

9,4,3,6,1,2,7,5,8,

8,9,2,1,7,6,5,4,3,

3,1,6,5,4,8,2,7,9,

5,7,4,3,2,9,1,8,6,

7,3,5,4,6,1,8,9,2,

6,8,9,2,3,5,4,1,7,

4,2,1,8,9,7,3,6,5,

标签: javajava.util.scannerinputmismatchexception

解决方案


使用也管理新行(空格,...)的分隔符。Scanner.useDelimiter接受正则表达式

,\s*

使用Regex101可见

这样做的好处是您不必费心知道数据的格式是什么,您无需检查任何内容即可阅读它。

例子 :

String s = "1,2,3,4,5,"
        + "\n6,7,8,9,10";
Scanner scan = new Scanner(s);
scan.useDelimiter(",\\s*");

while(scan.hasNext()){
    System.out.println(scan.nextInt());
}

scan.close();

输出 :

1
2
3
4
5
6
7
8
9
10

推荐阅读