-1

我正在尝试研究一种将字符串的 ArrayList 作为参数并从中删除所有偶数长度的字符串的方法。这是我到目前为止所拥有的:

public void removeEvenLength(ArrayList<String> items) {
    for (String s : items) {
        if (s.length() % 2 == 0) items.remove(s);
    }
}

由于某种原因,这不起作用,当我尝试在其中包含元素的任何 ArrayList 上运行它时,它会显示错误。有人能告诉我为什么吗?在此先感谢您的帮助。

4

2 回答 2

3

您不能从中删除项目List并同时在循环中运行。为此使用iterator

List<String> items = ....
Iterator<String> it = items.iterator();
while (it.hasNext()) {
   String s = it.next(); 
    if (s.length() % 2 == 0){
         it.remove();
     }

}
于 2013-11-03T18:46:40.253 回答
1

您必须使用冗长的成语:

for (Iterator<String> it = items.iterator(); it.hasNext();)
  if (it.next().length() % 2 == 0) it.remove();

原因:您的增强 for循环编译成上面的代码,并且,当您使用时Iterator,除了调用之外,不允许您通过任何其他途径更改基础列表Iterator#remove,以便迭代器知道删除。

于 2013-11-03T18:47:55.697 回答