2017-05-02 30 views
0

我有一個問題,這個代碼追加到數組中的Java

String[] strLines = null; 

while ((strLine = br.readLine()) != null){ 
    strLines = strLine.split("\\s"); 
    System.out.printf("next line - %s\n", strLine); 
    for(String asd : strLines) { 
     System.out.printf("array element - %s\n", asd); 
    } 
    System.out.println(strLines.length); 
} 

我試圖讓從文件中讀取程序,然後寫所有獨特單詞到另一個文件。我遇到的問題是strLines數組(後來轉換爲Set)被while循環的每次迭代覆蓋。有可能以某種方式追加到這個數組,或者我應該用另一種方式來存儲我的單詞嗎?

這可能是一個非常初學者的問題(我只是不定期地編寫了幾個月的代碼),但我無法在任何地方找到答案。提前致謝!

+0

* strLines數組(後來我轉換爲Set)*以後不要將它轉換爲Set。相反,在循環之前創建一個空集,並將您讀取的每個詞添加到該集。 strLines數組應該在循環中聲明。它應該被命名爲「單詞」,因爲它是一個數組......單詞。 –

回答

4

沒有理由創建一個數組,如果你所做的一切都是在稍後將它轉換爲集合。只需添加到您的集while循環:

String foo = "foo bar baz foo bar baz"; 
Set<String> fooSet = new HashSet<>(); 
fooSet.addAll(Arrays.asList(foo.split("\\s"))); 

對於示例

Set<String> fooSet = new HashSet<>(); 

while ((strLine = br.readLine()) != null){ 
    fooSet.addAll(Arrays.asList(strLine.split("\\s"))); 
} 
0

當你不知道你的數組的確切大小可能是,我使用ArrayList。 ArrayList確實需要這裏給出的導入:import java.util.ArrayList您還需要以某種方式聲明它。對於一個完整的字符串的ArrayList是這樣的:ArrayList<String> arrayListOfStrings = new ArrayList<String>();對於Object類型的ArrayList應該是這樣的:ArrayList<Object> arrayListOfObjects = new ArrayList<Object>();您可以創建任何類型的對象的ArrayList。要添加項目,請使用ArrayList的.add()函數。 IE:arrayListOfObjects.add(indexOfObject) ArrayLists也有.get(index),.remove(index).add(index, Object).size()等。我希望你能在ArrayLists上找到這個簡短的教程很有幫助!

0

可以使用List<String>集合來存儲以這種方式找到的所有的話:

List<String> words = new ArrayList<>(); 

    while ((strLine = br.readLine()) != null){ 
    String[] strLines = strLine.split("\\s"); 
    words.addAll(Arrays.asList(strLines)); 
    System.out.printf("next line - %s\n", strLine); 
    } 

    for(String word: words) { 
     System.out.printf("word - %s\n", word); 
    } 
    System.out.println(words.size()); 
0

非常感謝您的答案!所有這些都非常有幫助,解決了我在while循環中創建一個集合的問題,建議使用baao

+0

請不要發佈這樣的消息作爲答案。答案應該只是答案。相反,upvote你認爲有用的答案,並可以發表感謝評論這些答案。 –