我想显示字符列表中出现的数字,然后删除该数字.这是我的代码:
包心房;
import java.util.ArrayList;
import java.util.ListIterator;
public class MyTrials {
public static void main(String[] args) {
ArrayList<Character> list = new ArrayList<Character>();
list.add('a');
list.add('1');
list.add('5');
System.out.println(list.size());
for( ListIterator i = list.listIterator(list.size()); i.hasPrevious();){
Character c = (Character) i.previous();
if( Character.isDigit(c)){
System.out.println(c + " is a digit");
list.remove(c);
}
}
System.out.println(list.size());
}
}
Run Code Online (Sandbox Code Playgroud)
这是错误消息:
3
5 is a digit
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$ListItr.previous(AbstractList.java:386)
at mytrials.MyTrials.main(MyTrials.java:27)
Java Result: 1
Run Code Online (Sandbox Code Playgroud)
导致此错误的原因是什么以及如何纠正.
尝试
i.remove();
Run Code Online (Sandbox Code Playgroud)
代替
list.remove(c);
Run Code Online (Sandbox Code Playgroud)
请注意,Iterator.remove是在迭代期间修改集合的唯一安全方法; 如果在迭代进行过程中以任何其他方式修改基础集合,则行为未指定.
当需要时,使用Iterator而不是for-each(循环)构造:
删除当前元素.for-each构造隐藏了迭代器,因此您无法调用remove.因此,for-each构造不可用于过滤.
并行迭代多个集合.
| 归档时间: |
|
| 查看次数: |
318 次 |
| 最近记录: |