删除arraylist中的元素

时间:2015-04-07 19:58:05

标签: java arraylist stop-words

我有关键字arraylist ..我想删除包含停用词的arraylist元素(String)。

这是我要删除元素的arraylist1:

bicara
dunia
penerbangan
orang
sering
salah
menjawab
bila
ditanya
siapa
manusia
pertama
yang
mengudara
mayoritas
menjawab
oliver
wilber
wright
dari
amerika
serikat
yang
terbang
pada
tahun
padahal

这是停用词:

dari
bila
ditanya
menjawab
pada
padahal
pertama
siapa
sering
tahun
yang

这是我的代码:

for (int i = 0; i < arraylist1.size(); i++) {
    for (int j = 0; j < stopwords.size(); j++) {
        if (stopwords.get(j).equals(arraylist1.get(i)))
            arraylist1.remove(i);
    }
}

但结果与我想要的不符:

bicara
dunia
penerbangan
orang
salah 
bila (not removed)
manusia
mengudara
mayoritas
oliver
wilber
wright
amerika
serikat
terbang
padahal (not removed)

2 个答案:

答案 0 :(得分:3)

问题在于,您不会查看列表的每个元素,而是查看列表的每个索引。如果删除元素,则该元素后面的元素将向前移动,从而更改其索引。如果一个停用词跟随另一个停用词,则忽略第二个停用词。

如果您想修复解决方案,可以执行以下操作:

for (int i = 0; i < arraylist1.size(); i++) {
    for (int j = 0; j < stopwords.size(); j++) {
        if (stopwords.get(j).equals(arraylist1.get(i))) {
            arraylist1.remove(i);
            i--; // you have to look at the same index again!
        }
    }
}

但是,最好使用Java API提供的方法:

arraylist1.removeAll(stopwords);

答案 1 :(得分:2)

有一种更简单的方法(假设原始列表中没有重复项):

    for (int j = 0; j < stopwords.size(); j++) {
        arraylist1.remove(stopwords.get(j));
    }

或更好(即使有重复也会有效):

    arraylist1.removeAll(stopwords);