0

我有两个arraylist fileWordList 和stopWordList。我想将 fileWordList 与 stopWordList 进行比较,并从 fileWordList 中删除任何相同的单词。我的代码如下:

ArrayList<String> fileWordList = new ArrayList<String>();
ArrayList<String> stopWordList = new ArrayList<String>();

for (Iterator<String> i = fileWordList.iterator(); i.hasNext(); ) {

    for(Iterator<String> j = stopWordList.iterator(); j.hasNext();){
        if (j.next() == i.next()){
           i.remove();
        }
    }

}

错误是由:java.util.NoSuchElementException 引起的。如何解决这个问题?代码有什么问题?

4

3 回答 3

4

你打电话的i.next()次数太多了。您应该在外循环的每次迭代中调用一次并记住结果。

for (Iterator<String> i = fileWordList.iterator(); i.hasNext(); ) {
    String s = i.next();
    for(Iterator<String> j = stopWordList.iterator(); j.hasNext();){
        if (j.next() == s){ // consider using equals here
           i.remove();
           break; // No need to continue checking.
        }
    }

}

我怀疑你想用来j.next().equals(s)比较两个字符串是否相等。

您可能还想考虑使用ArrayList.contains. 或者使用 aHashSet来存储停用词,因为您可能不关心它们的存储顺序。

于 2012-07-29T15:56:51.350 回答
1

为什么不使用 ArrayListcontains()方法而不是嵌套循环?

for (Iterator<String> i = fileWordList.iterator(); i.hasNext(); ) {

    String word = i.next();

    // Only removes first occurence.
    if (stopWordList.contains(word)) {
        i.remove();
    }
}

// Better and simpler solution
for (String word : stopWordList) {
    while(fileWordList.contains(word)) {
        fileWordList.remove(word);
    }
}
于 2012-07-29T16:15:30.420 回答
0
for(String word : stopWordList) 
    if(fileWordList.contains(word)) 
        fileWordList.remove(word)
于 2012-07-29T16:19:10.790 回答