【问题标题】:Remove element in arraylist删除数组列表中的元素
【发布时间】:2015-06-12 13:24:24
【问题描述】:

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

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

【问题讨论】:

标签: java arraylist stop-words


【解决方案1】:

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

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

或更好(即使有重复也可以):

    arraylist1.removeAll(stopwords);

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-09-14
      • 2012-03-30
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 2015-07-14
      相关资源
      最近更新 更多