我有一个要与扫描仪类一起阅读的txt文件。
我正在使用double for循环读取文件并将其读取到2d数组。
文件如下:
3 3 。 R# 。 。 # 。 。 #
第一行分别是2d数组的长度和宽度。
如果读取的是类似的txt文件,我就可以正常工作了,但是它不是char而是int,像这样:
3 3 1 0 1 1 1 1 0 0 1
我在这里使用的方法如下:
readFile(String filename){
Scanner scan = new Scanner(new File(filename));
// read the first two numbers in the file for the size of the array
int numberRows = scan.nextInt();
int numberColumns = scan.nextInt();
char[][] grid = new char[numberRows][numberColums];
for (int i = 0; i < numberRows; i++) {
for (int j = 0; j < numberColumns; j++) {
grid[i][j] = scan.next().charAt(0);
}
}
}
我希望这与使用char而不是int时相同。
但是我得到一个错误 NoSuchElementException何时 scan.next()。charAt(0) 实际上是试图从txt文件读取char。
我要读取字符串而不是字符吗?我假设Java扫描程序类会将单个字符读取为char。
答案 0 :(得分:1)
Scanner.next()
始终返回String
。请检查https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html了解更多信息。在scan.next()
上执行任何操作之前,例如scan.next().charAt(0)
,您应该检查if (scan.hasNext())
的状况。
答案 1 :(得分:0)
让我们为javadoc打开Scanner#next方法。
它指出:“从此扫描程序中查找并返回下一个完整令牌。完整令牌位于前面,然后是与定界符模式匹配的输入。”
它还指出,如果没有更多标记可用,则会生成NoSuchElementException。
目前,我们知道您为什么会遇到此异常。
通常将next方法与设置提到的模式的useDelimiter方法一起使用。