用扫描仪从txt文件读取char并添加到2d数组中

时间:2019-11-10 19:33:46

标签: java multidimensional-array java.util.scanner

我有一个要与扫描仪类一起阅读的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。

2 个答案:

答案 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方法一起使用。