2013-11-22 55 views
0

對於類項目,我們必須採用一個字符串(一個段落),將其放入單個單詞的數組中,然後將這些單詞放入Object Array的對象中。單詞不能重複,所以我使用Set來只獲取唯一值,但只有某些單詞重複!這是該方法的代碼。對於模糊的描述抱歉。即使使用了一個集合,也會在數組中重複使用

Private void processDocument() 
    { 
    String r = docReader.getLine(); 
    lines++; 
    while(docReader.hasLines()==true) 
    { 
     r= r+" " +docReader.getLine(); 
     lines++; 
    } 
    r = r.trim(); 
    String[] linewords = r.split(" "); 
    while(linewords.length>words.length) 
    { 
     this.expandWords(); 
    } 
    String[] newWord = new String[linewords.length]; 
    for(int i=0;i<linewords.length;i++) 
    { 

     newWord[i] = (this.stripPunctuation(linewords[i])); 
    } 

    Set<String> set = new HashSet<String>(Arrays.asList(newWord)); 
    Object[]newArray = set.toArray(); 
    words = new Word[set.size()-1]; 
    String newString = null; 
    for(int i =0;i<set.size();i++) 
    { 
     if(i==0) 
     { 
      newString = newArray[i].toString() + ""; 
     } 
     else 
     { 
      newString = newString+newArray[i].toString()+" "; 
     } 
    } 
    newString = newString.trim(); 
    String[] newWord2 = newString.split(" "); 
    for(int j=0;j<set.size()-1;j++) 
    { 


     Word newWordz = new Word(newWord2[j].toLowerCase()); 
     words[j] = newWordz; 

    } 
+3

這裏有很多代碼 - 我強烈懷疑你不需要那麼多來證明問題。如果你展示一個簡短但完整的程序來展示問題,這將非常有幫助。 –

+1

你能舉個例子嗎?一行或兩行輸入以及重複出現在這些行中的單詞會很有幫助。 – GregA100k

回答

2

我相信問題是當你把它放到HashSet中的話大寫不同,導致HashCode不同。將所有內容從文件中讀取時將其全部設爲小寫,並且它應該可以正常工作。

newWord[i] = (this.stripPunctuation(linewords[i])).toLowerCase(); 
+0

對不起復制你的代碼,我寫了完全相同的解決方案hehehe。上投票。 –

+0

你華麗的混蛋。有效 – user3022985

0

試試這個:

public String[] unique(String[] array) { 
    return new HashSet<String>(Arrays.asList(array)).toArray(); 
} 

Bohemainanswer無恥複製。

另外,正如@Brinnis所指出的,確保單詞被修剪並在正確的情況下。

for(int i = 0; i < linewords.length; i++) { 
    newWord[i] = this.stripPunctuation(linewords[i]).toLowerCase(); 
} 
String[] newArray = unique(newWord); 
相關問題