2016-08-16 267 views
0

当试图扫描文本文件,然后扫描文本文件中的每个单独的行来创建一个对象时,我会得到下面的错误。 关于如何解决这个问题的任何想法?扫描仪内的扫描仪错误

Error: java.util.NoSuchElementException at java.util.Scanner.throwFor(Scanner.java:862) at java.util.Scanner.next(Scanner.java:1371) at 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(); 
    } 
+0

它试图阅读的内容是什么? – Sanjeev

+0

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

+0

为什么你想使用另一台扫描仪?你已经有'String'使用'String'功能,比如'split()'... – brso05

回答

1

正如你在评论

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

你的第二个扫描器使用了一个错误的分隔符,因此你得到了这个异常。

尝试:

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

希望这有助于。

+0

非常感谢,这对我有用! –

+0

很高兴帮助你:) – Sanjeev

2

我认为你可以这样做:

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]; 
    } 

} 
+0

java.lang.ArrayIndexOutOfBoundsException:2 \t at MyZoo.readDataFromFile(MyZoo.java:110)。如果我这样做,我得到的错误 –

+0

每行都包含三个字符串animalType,species和name吗? – Shahid