繁体   English   中英

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

[英]Duplicates in Array even though a Set was used

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

    }

我相信问题是当你把它放入HashSet时,单词的大小写不同,导致HashCode不同。 在从文件中读取所有内容时,将所有内容都转换为小写,它应该可以正常工作。

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

尝试这个:

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

Bohemain回答中无耻地复制。

此外,如@Brinnis所述,请确保修剪单词并在正确的情况下。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM