2014-02-16 73 views
0

我有一種方法可以將掃描儀返回到具有輸入行的文本文件(我無法正確顯示此文件,但喜歡 - 嗨(新行)This(\ n)Is( \ n)我(\ n))。然後在主要中,我使用掃描儀來計算輸入的行數,然後重置掃描儀。我後來用掃描儀把輸入的行到一個數組(我不想一個ArrayList),但Java的說「java.util.NoSuchElementException:沒有找到行」 ......Java中的掃描儀問題

while(scanner.hasNextLine()){ 
    numOfStrings++; 
    scanner.nextLine(); 
} 

scanner.reset(); 
String[] stringsOfInput = new String[numOfStrings]; 
for(int i = 0; i < numOfStrings; i++){ 
    String s = scanner.nextLine(); //returns "No line found" error message 
    stringsOfInput[i] = s; 
} 

有誰知道如何解決這個問題,所以它應該做什麼?

+2

'復位()'不會做你認爲它 - 從[的JavaDoc](http://docs.oracle.com/javase/7 /docs/api/java/util/Scanner.html#reset%28%29) - _重置掃描器會丟棄所有可能已被調用'useDelimiter(java.util.regex.Pattern)'所改變的顯式狀態信息' ,'useLocale(java.util.Locale)'或'useRadix(int)'._復位'Scanner'不能倒回數據流。 –

+1

我想你需要另一臺掃描儀來保存線路,重置將不會從開始 – Evans

回答

2

最通用的方法,這樣做是將行添加到ArrayList<String>然後做出爲Array(String[] stringsOfInput = myArrayList.toArray(new String[myArrayList.size()]);

+0

開始文件或直接使用'List'並且不浪費內存和CPU滴答... –

+0

這當然會,理想,但OP說:「輸入到一個數組(我不想要一個ArrayList)」 – GreySwordz

+0

但也許一個'列表'好吧...哈!我對OP的評論比對你的回答更有意義。 –

0

你可能想嘗試把的內容for循環,而內。這樣,您可以通過文件獲取一個循環中的字符串數量和每個字符串。

編輯: 樣品與ArrayList的

ArrayList<String> stringsOfInput = new ArrayList<String>(); 

while(scanner.hasNextLine()) 
{ 
    stringsOfInput.add(scanner.nextLine()); 
    numOfStrings++; 
} 
+0

事情是,因爲我使用的是數組,而不是ArrayList,所以Java不會讓我這樣做,因爲在索引0處沒有任何內容,所以我無法插入輸入行。我需要知道數組的大小,所以我可以做'String [] s = new String [?]'然後放入輸入 - 但只用'String [] s = {};'我不能做那。 – javaChipFrapp

+0

如果它需要使用一個數組,你可以使用和ArrayList 一樣的GreySwordz提到。 ArrayList的固定不像Array。使用示例代碼編輯答案。 – jmw5598