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