While循环出现NoSuchElementException错误

时间:2018-07-14 11:50:48

标签: java

我的 readDataFromFile()方法读取这样的文本文件:

Bird    Golden Eagle    Eddie
Mammal  Tiger   Tommy
Mammal  Lion    Leo
Bird    Parrot  Polly
Reptile Cobra   Colin

使用我当前的 while loop ,它分隔每个列: type, species and name 。 但是第一行的“ Golden Eagle”由 space 而不是 tab 分隔,因此它计为2个不同的子字符串,因此输出将会是 'Golden Eagle Eddie' ,而不是 'Bird Golden Eagle Eddie'

要尝试解决此问题,我使用了 scanner.useDelimiter("\\t"); ,但是输出如下所示:

Golden Eagle  Eddie
Mammal Tiger
Mammal  Lion Leo
Bird
Reptile  Cobra Colin

带有 ERROR (错误),该错误会在我的代码'scanner.nextLine();'

中突出显示此行
java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Scanner.java:1540)
    at MyZoo.readDataFromFile(MyZoo.java:72)

我的代码:

scanner.useDelimiter("\\t");

      scanner.next();
      while(scanner.hasNextLine())
       {
       String type = scanner.next();
       String species = scanner.next();
       String name = scanner.next();
       System.out.println(type + "  " + species + " " + name);
       scanner.nextLine();
       addAnimal( new Animal(species, name, this) );
       }

      scanner.close();

1 个答案:

答案 0 :(得分:0)

首先,您粘贴的文本不是制表符分隔的,而是多空格分隔的。确保您使用的真实文件是制表符分隔的。

似乎可以用分隔符来接受想要的行为,该分隔符接受制表符或换行符,但不接受空格。这是一个示例:

try (Scanner scanner = ...) {
  scanner.useDelimiter("\\t|\\R");

  while (scanner.hasNext()) {
    String type = scanner.next();
    String species = scanner.next();
    String name = scanner.next();
    ...
  }

}

如果您这样做,则不想打nextLine