0

我有两个字符串数组列表,我想计算它们中的单词。

每个 ArrayList 都包含关键短语,例如几个单词的字符串,例如:

超衰退

斯特拉达隆加

奥巴马总统

[...]

我尝试了这两种方法,但我得到了 NullPointerException

 public boolean containsKeyword(String testKeyword, ArrayList<String> list) 
{ return list.contains(testKeyword);
}

public int compareKeywords(Quotidiano quotidiano){
    int sameKeywords=0;
    for(int i=0; i<this.Keywords.size(); i++){
            if(this.containsKeyword(this.getKeyword(i), quotidiano.Keywords))
             sameKeywords++;
          }

    return sameKeywords;
}

非常感谢您的回答!


[编辑]

它使用交叉点工作,谢谢!但是如果比较单个单词会更好。

例如,如果我有关键词

“意大利的传播”,

“价差低于 300”,

我认为交集是空的,而不是我想返回“传播”。我该怎么做?

4

3 回答 3

1

使用Apache ListUtils 交集

public static java.util.List intersection(java.util.List list1,
                                      java.util.List list2)

PS:这会抛出java.lang.NullPointerException- 如果任一列表为空

于 2012-11-03T11:32:52.410 回答
1

每当您从未知来源获得输入时,您都应该检查 null。你不应该认为输入是好的。

public boolean containsKeyword(String testKeyword, ArrayList<String> list) 
{ 
    return (list != null) ? list.contains(testKeyword) : false;
}

public int compareKeywords(Quotidiano quotidiano){
    if(quotidiano == null || this.Keywords == null) return 0;
    int sameKeywords=0;
     for(int i=0; i<this.Keywords.size(); i++){
        if(this.containsKeyword(this.getKeyword(i), quotidiano.Keywords))
         sameKeywords++;
    }

    return sameKeywords;
}

检查 this.Keyword 是可选的,因为我假设这是您的代码,并且您知道它应该始终与 null 不同。

于 2012-11-03T11:35:55.667 回答
0

NullPointerException当您使用任何对象的成员并且该对象尚未初始化时发生。确保两个列表都已初始化并且不为空。

于 2012-11-03T11:38:38.333 回答