删除数组列表中的元素
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);
我有停用词数组列表。我想删除包含停用词的数组列表元素(字符串)。
这是我要删除元素的 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);