2016-08-16 281 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