删除arraylist元素

时间:2012-07-29 15:52:06

标签: java arraylist

我有两个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。怎么解决这个?代码有什么问题?

3 个答案:

答案 0 :(得分: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。或使用HashSet存储您的停用词,因为您可能不关心它们的存储顺序。

答案 1 :(得分:1)

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

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);
    }
}

答案 2 :(得分:0)

for(String word : stopWordList) 
    if(fileWordList.contains(word)) 
        fileWordList.remove(word)