java - 即使使用了 Set,数组中仍存在重复项

标签 java arrays set

对于一个类项目,我们必须获取一个字符串(一个段落),将其放入单个单词的数组中,然后将这些单词放入对象数组的对象中。这些单词不能重复,因此我使用 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();

关于java - 即使使用了 Set,数组中仍存在重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20152374/

相关文章:

c++ - 如何在 C++ 错误 C2338 中组织 map<set<multiset<int>>,int>

java - 我如何从 JBoss 中的 EJB 调用 JNI 代码

java - 如何依赖 Gradle 中的所有 *compile 和 *testCompile 任务

arrays - 值更改后 CollectionView reloaddata()

arrays - 为什么链表比数组快?

android - 如何在文本转语音中使用印地语(印度母语)?

java - 访问请求 header

java - 存储每几个小时更新一次的小型、交替、公共(public)数据的最佳方法是什么?

javascript - 使用 Jquery 在 php 关联数组中迭代循环

search - 使用 Redis 从集合中反向搜索