删除数组列表中的元素

Remove element in arraylist

我有停用词数组列表。我想删除包含停用词的数组列表元素(字符串)。

这是我要删除元素的 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)

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

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

或更好(即使有重复也能工作):

    arraylist1.removeAll(stopwords);

问题是您没有查看列表的每个 element,而是查看列表的每个 index。如果删除一个元素,则该元素之后的元素将向前移动,从而更改它们的索引。如果停用词后跟另一个停用词,则第二个将被忽略。

如果你想修复你的解决方案,你可以这样做:

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!
        }
    }
}

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

arraylist1.removeAll(stopwords);