使用java从字符列表中删除数字

Niv*_*tha 2 java

我想显示字符列表中出现的数字,然后删除该数字.这是我的代码:

包心房;

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)

导致此错误的原因是什么以及如何纠正.

Ach*_*Jha 8

尝试

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构造不可用于过滤.

  • 并行迭代多个集合.

  • 解释将是一个很好的补充. (2认同)