【问题标题】:Scanner within scanner error扫描仪内的扫描仪错误
【发布时间】:2016-08-16 12:01:37
【问题描述】:

当尝试扫描文本文件,然后扫描文本文件中的每一行以创建对象时,我收到以下错误。 关于如何解决这个问题的任何想法?

错误:java.util.NoSuchElementException 在 java.util.Scanner.throwFor(Scanner.java:862) 在 java.util.Scanner.next(Scanner.java:1371) 在 MyZoo.readDataFromFile(MyZoo.java:111)

while(scanner.hasNextLine()){
    lineOfInput = scanner.nextLine();
    if(lineOfInput.startsWith("#")){

    } else {
        String animalType, species, name;
        Scanner newScanner = new   Scanner(lineOfInput).useDelimiter("\\s*,\\s*");

        animalType = newScanner.next();
        System.out.println(animalType);
        species    = newScanner.next();
        name       = newScanner.nextLine();
   }

【问题讨论】:

  • 它试图阅读的内容是什么?
  • 这是一个包含数据行的文本文件,我使用第一个扫描仪在行中读取。然后尝试扫描读入的行中的每个单词以将它们分配为变量。在我扫描前 3 个之后,我希望它能够读取动物特定类中的其余数据
  • 为什么要使用其他扫描仪?您已经有一个 String 使用 String 函数,如 split()...
  • 我必须使用第二台扫描仪
  • 快速说明:最好使用 if(!(lineOfInput.startsWith("#"))){ //如果它启动with # //Your code from the else{} here }

标签: java


【解决方案1】:

我认为你可以这样做:

while (scanner.hasNextLine()) {
    lineOfInput = scanner.nextLine();
    if (lineOfInput.startsWith("#")) {

    } else {
        String animalType, species, name;

        String s[] = lineOfInput.split(" ");
        animalType = s[0];
        species = s[1];
        name = s[2];
    }

}

【讨论】:

  • java.lang.ArrayIndexOutOfBoundsException: 2 在 MyZoo.readDataFromFile(MyZoo.java:110)。如果我这样做,我会得到错误吗
  • 每行是否包含三个字符串 animalType、species 和 name?
【解决方案2】:

正如你在评论中所说的

“这是一个包含数据行的文本文件,我使用第一个扫描仪在该行中读取。然后尝试扫描读入的行中的每个单词以将它们分配为变量。在我第一次扫描后3、我希望它能够读取动物特定类中的其余数据“

您的第二个扫描仪使用了错误的分隔符,因此您遇到了该异常。

试试:

Scanner newScanner = new   Scanner(lineOfInput).useDelimiter("\\W");

希望这会有所帮助。

【讨论】:

  • 很高兴能帮到你:)
猜你喜欢
  • 2015-10-02
  • 2018-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-17
  • 2020-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多