我正在尝试处理一个方法,该方法将字符串的ArrayList作为参数,并从中删除所有偶数长度的字符串。这就是我到目前为止所做的:
public void removeEvenLength(ArrayList<String> items) {
for (String s : items) {
if (s.length() % 2 == 0) items.remove(s);
}
}
由于某种原因,这不起作用,当我尝试在任何包含元素的ArrayList上运行它时,它会显示错误。有人能告诉我为什么吗?在此先感谢您的帮助。
答案 0 :(得分: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();
}
}
答案 1 :(得分:1)
你必须使用冗长的成语:
for (Iterator<String> it = items.iterator(); it.hasNext();)
if (it.next().length() % 2 == 0) it.remove();
原因:您的增强循环编译成上述代码,当您使用Iterator
时,您不能通过任何其他路由更改基础列表,除非通过调用Iterator#remove
,以便迭代器知道删除。