即使使用了Set,也会在Array中重复

时间:2013-11-22 18:54:58

标签: java arrays set

对于一个类项目,我们必须取一个字符串(一个段落),将它变成一个单独的单词数组,然后将这些单词变成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;

    }

2 个答案:

答案 0 :(得分:2)

我认为问题在于当你把它放入HashSet时,单词的大写不同,导致HashCode不同。

,当你从文件中读取它时,将所有内容都压缩为小写
newWord[i] = (this.stripPunctuation(linewords[i])).toLowerCase();

答案 1 :(得分: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);