我有关键字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)
答案 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);