0

我一直試圖讓這個工作,因爲我醒了,我根本無法弄清楚是什麼導致這個例外。如何在進行簡單文件處理時修復NoSuchElementException?

try { 
     scan = new Scanner(new File("dictionary.txt")); 
    } catch (FileNotFoundException ex) { 
     System.out.print("File not found"); 
    } 
    ArrayList<String> dictionary = new ArrayList<String>(); 
    while (scan.hasNextLine()) { 
     System.out.println(scan.next()); 
     dictionary.add(scan.nextLine()); 
    } 
    scan.close(); 

而這是輸出,線167是 「dictionary.add(scan.nextLine)」:

C:\用戶\ Aaronbobaron \文件\的NetBeansProjects \ W

鱷魚

斑馬

袋鼠

山貓

摩天大樓

異常在線程 「AWT-EventQueue的-1」 java.util.NoSuchElementException:沒有發現線在 java.util.Scanner.nextLine(掃描儀。 Java的:1585) 在Word.jButton1ActionPerformed(Word.java:167) 在Word.access $ 100(Word.java:16) 在字$ 2.actionPerformed(Word.java:92) 在javax.swing.AbstractButton中。 fireActionPerformed(AbstractButton.java:2018) 在javax.swing.AbstractButton中的$ Handler.actionPerformed(AbstractButton.java:2341) 在javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 在javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) (javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.Component.processMouseEvent(Component.java:6505) at javax.swing.JComponent.processMouseEvent(JComponent.java: 3321) 在java.awt.Component.processEvent(Component.java:6270) 在java.awt.Container.processEvent(Container.java:2229) 在java.awt.Component.dispatchEventImpl(Component.java:4861) at java.awt.Container.dispatchEventImpl(Container.java:2287) 在java.awt.Component.dispatchEvent(Component.java:4687) 在java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 在java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) 在java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 在java.awt.Container.dispatchEventImpl(Container.java:2273) 在java.awt.Component.dispatchEvent(Component.java:4687) 在java的。 awt.EventQueue.dispatchEventImpl(EventQueue.java:729) at java.awt.EventQueue.access $ 200(EventQueue.java:103) at java.awt.EventQueue $ 3.run(EventQueue.java:688) at java。 awt.EventQueue $ 3.run(EventQueue.java:686) at java.security.AccessContr在java.security.ProtectionDomain處使用$ 1.doIntersectionPrivilege(ProtectionDomain.java:76) 在java.security.ProtectionDomain $ 1.doIntersectionPrivilege(ProtectionDomain.java:87) (java.awt.EventQueue $ 4。運行(EventQueue.java:702) at java.awt.EventQueue $ 4.run(EventQueue.java:700) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain $ 1.doIntersectionPrivilege(ProtectionDomain .java:76) at java.awt.EventQueue。dispatchEvent(EventQueue.java:699) 在java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 在java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 在java.awt.EventDispatchThread.pumpEventsForHierarchy( EventDispatchThread.java:150) 處java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 在java.awt.EventDispatchThread.run java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) (EventDispatchThread。 Java的:91)

文本文件是:

鱷魚

斑馬

袋鼠

山貓

摩天大樓

+0

可以粘貼dictionary.txt的內容,如果它的一個小文件 – 2013-04-27 15:40:27

+1

很高興知道現在你的問題的解決。 :) – Jops 2013-04-27 15:56:21

回答

1
while (scan.hasNextLine()) { 
     System.out.println(scan.next()); 
     dictionary.add(scan.nextLine()); 
    } 

您檢查一次,看是否有更多的內容,然後調用的next()形式的兩倍。無法保證第二次通話不會失敗(正如您發現的那樣)。

+0

謝謝,這是有道理的 – jeanqueq 2013-04-27 15:51:16

1

這兩種移動到下一個標記:

System.out.println(scan.next()); 
dictionary.add(scan.nextLine()); 

爲了解決這個錯誤,重新做一次檢查調用第二條線之前:

while (scan.hasNextLine()) { 
    System.out.println(scan.next()); 
    if (scan.hasNextLine()) 
     dictionary.add(scan.nextLine()); 
} 
1

我猜你試圖跳過代碼中的空行。

這應該工作得很好。將scan.next中的值轉換爲temp字符串變量,並使用相同的值打印以及添加到字典中。

String tmp; 
    while (scan.hasNextLine()) { 
     tmp = scan.next(); 
     System.out.println(tmp); 
     dictionary.add(tmp); 
    } 
    scan.close(); 
相關問題