我试图通过读取带有逗号分隔数字的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();
}
}
}
TXT文件:
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,
答案 0 :(得分:0)
对于扫描仪,您需要检查是否存在下一个元素。在您到达行尾的情况下,您得到的是空字符串,您想将其强制转换为整数。在这种情况下,您只需跳到下一个扫描的元素。
int[][] array = new int[9][9];
try (Scanner s = new Scanner(new File(fileName))) {
s.useDelimiter(",");
int i, j;
while (s.hasNext()) {
for (i = 0; i < 9; i++) {
for (j = 0; j < 9; j++) {
if (s.hasNextInt())
array[i][j] = s.nextInt();
else if(s.hasNext())
s.next();
}
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
其次要记得关闭扫描仪。在上面的示例中,我使用了try-catch-resources来做到这一点。
答案 1 :(得分:0)
使用分隔符也管理换行符(空格,...)。 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
答案 2 :(得分:0)
在内部for循环之后添加s.nextLine()
应该可以解决您的问题。它会读取cr / lf,然后移至下一行进行读取。
import java.util.Scanner;
import java.io.FileNotFoundException;
public class MyClass {
public static void main(String[] args)
{
String fileName = "1,5,7,9,8,3,6,2,4,\r\n" +
"2,6,8,7,5,4,9,3,1,\r\n" +
"9,4,3,6,1,2,7,5,8,\r\n" +
"8,9,2,1,7,6,5,4,3,\r\n" +
"3,1,6,5,4,8,2,7,9,\r\n" +
"5,7,4,3,2,9,1,8,6,\r\n" +
"7,3,5,4,6,1,8,9,2,\r\n" +
"6,8,9,2,3,5,4,1,7,\r\n" +
"4,2,1,8,9,7,3,6,5,";
Scanner s = null;
try {
s = new Scanner(fileName);
s.useDelimiter(",");
} catch (Exception 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();
}
s.nextLine();
}
}
for (i = 0; i < array.length; i++) {
for (j = 0; j < array[i].length; j++) {
System.out.print(array[i][j]);
}
System.out.println();
}
s.close();
}
}
结果:
157983624
268754931
943612758
892176543
316548279
574329186
735461892
689235417
421897365