对于一个类项目,我们必须取一个字符串(一个段落),将它变成一个单独的单词数组,然后将这些单词变成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;
}
答案 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();
}
另外,如@Brinnis所述,请确保修剪单词并在正确的情况下。
for(int i = 0; i < linewords.length; i++) {
newWord[i] = this.stripPunctuation(linewords[i]).toLowerCase();
}
String[] newArray = unique(newWord);