我有兴趣在迭代时将字符串连接到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时,它会导致程序的其他部分出现故障?所以只需要一些指导。
答案 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)
答案 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);