迭代时连接ArrayList的元素

时间:2014-11-05 18:01:21

标签: java

我有兴趣在迭代时将字符串连接到arraylist的元素。当我运行下面的代码时,我得到一个ConcurrentModificationException。我的代码是:

ArrayList<String> list=new ArrayList<String>();
list.add("000);
list.add("00");
list.add("0");
for(String s:list)
{
    if(s.length()==1)
    {
        String s2="000" + s;
        list.add(s2);

    }


    if(s.length()==2)
    {
        String s2="00" + s;

    }


    if(s.length()==3)
    {
        String s2="0" + s;
    }
}

我的问题是如何在不使用StringBuilder的情况下将连接的字符串添加回列表,因为当我使用StringBuilder时,它会导致程序的其他部分出现故障?所以只需要一些指导。

7 个答案:

答案 0 :(得分:1)

我只想使用List.set

List<String> list = new ArrayList<String>();

list.add("000");
list.add("00");
list.add("0");

for (int i = 0; i < list.size(); i++) {
    String value = list.get(i);
    list.set(i, ("0000" + value).substring(value.length()));
}

答案 1 :(得分:0)

如果您在for循环中的任何位置更改列表的内容(即添加或删除元素),则会发生异常。

ArrayList<String> list=new ArrayList<String>();
list.add("000);
list.add("00");
list.add("0");
ArrayList<String> itemsToAdd = new ArrayList<String>();  // <======
for(String s:list) {
    if(s.length()==1) {
        String s2="000" + s;
        //list.add(s2);   DONT DO THIS
        itemsToAdd.add(s2);  // DO THIS INSTEAD
    }

    if(s.length()==2) {
        String s2="00" + s;
    }


    if(s.length()==3) {
        String s2="0" + s;
    }
}

// NOW APPEND THE LIST
// This is safe as the iteration is complete.
list.addAll(itemsToAdd.add);

答案 2 :(得分:0)

  1. 制作第二个清单
  2. 将新元素添加到第二个列表
  3. 在完成迭代后,将第二个列表中的所有元素添加回第一个元素

答案 3 :(得分:0)

看一下这个:Modifying Java ArrayList while iterating over it

简短的故事:Java不会让你改变你正在迭代的列表。而是通过将要克隆的列表放入新的arraylist的构造函数参数中来创建副本,然后更改新列表:

ArrayList<String> list=new ArrayList<String>();
list.add("000);
list.add("00");
list.add("0");
ArrayList<String> listSecond =new ArrayList<String>(list);

for(String s:list)
{
    if(s.length()==1)
    {
        String s2="000" + s;
        listSecond.add(s2);

    }...

答案 4 :(得分:0)

你的list.add(s2)是个问题。您只是在迭代时不能使用列表(使用迭代器可以删除项目)。这是一个可能的解决方案:

    ArrayList<String> list=new ArrayList<String>();
    list.add("000");
    list.add("00");
    list.add("0");
    List<String> newOnes = new ArrayList<>();
    for(String s:list)
    {
        if(s.length()==1)
        {
            String s2="000" + s;
            newOnes.add(s2);

        }


        if(s.length()==2)
        {
            String s2="00" + s;

        }


        if(s.length()==3)
        {
            String s2="0" + s;
        }
    }
    list.addAll(newOnes);

答案 5 :(得分:0)

创建tempList并将元素添加到tempList,最后将tempList分配给list

public static void main (String[] args) throws Exception
    {
            ArrayList<String> list=new ArrayList<String>();
            ArrayList<String> tempList=new ArrayList<String>();
            list.add("000");
            list.add("00");
            list.add("0");

            for(String s:list)
            {
                if(s.length()==1)
                {
                    String s2="000" + s;
                    tempList.add(s2);

                }


                if(s.length()==2)
                {
                    String s2="00" + s;
                    tempList.add(s2);

                }


                if(s.length()==3)
                {
                    String s2="0" + s;
                    tempList.add(s2);
                }
            }
            list=tempList;
            System.out.println(list);

        }

答案 6 :(得分:0)

迭代时修改列表:(更通用和简短)

        ArrayList<String> list= new ArrayList<>();
        String zeros = "00000000";
        list.add("000");
        list.add("00");
        list.add("0");
        for(int i=0;i<list.size();i++) {
            String s = list.get(i) + zeros.substring(0,4-list.get(i).length());
            list.set(i,s);
        }           
        for (String s : list)
            System.out.println(s);