Java 在ArrayList中重复多行并按顺序将其添加回同一ArrayList

Java 在ArrayList中重复多行并按顺序将其添加回同一ArrayList,java,Java,我有一个具有以下字符串的arraylist: 02, String1 03, Num1 03, Num2 02, String2 根据另一个方法的输入,我需要重复以03开头的字符串,然后将其添加回同一arraylist 次数=4次 输出: 请帮忙 提前谢谢 到目前为止,我创建的代码具有arraylist所需的逻辑,但我需要完成的部分在上面……这不是家庭作业 private static String mergeFieldName(String string_element, int j, i

我有一个具有以下字符串的arraylist:

02, String1 
03, Num1
03, Num2
02, String2
根据另一个方法的输入,我需要重复以03开头的字符串,然后将其添加回同一arraylist 次数=4次 输出:

请帮忙

提前谢谢

到目前为止,我创建的代码具有arraylist所需的逻辑,但我需要完成的部分在上面……这不是家庭作业

private static String mergeFieldName(String string_element, int j, int numOfTimes)
{
     int innerCnt3 = 0;
     int innerCnt4=0;
     int innerCnt5=0;
     innerCnt3 = j+1;

     String tmpStr = "";
     innerCnt4 =innerCnt3;
     innerCnt5 = innerCnt3;
     while (true)
        {
            tmpStr = holdRecord.get(innerCnt5);
            tmpStr = tmpStr.replaceAll("( )+",ONE_SPACE).trim();
            if (!tmpStr.trim().substring(0, 2).equalsIgnoreCase("03"))
            {
                break;
            }
            innerCnt5++;
        }
     while (true)
        {
            tmpStr = holdRecord.get(innerCnt4);
            tmpStr = tmpStr.replaceAll("( )+",ONE_SPACE).trim();
            if (!tmpStr.trim().substring(0, 2).equalsIgnoreCase("03"))
            {
                break;
            }
            innerCnt4++;
        }
    while (true)
    {
        tmpStr = holdRecord.get(innerCnt3);
        tmpStr = tmpStr.replaceAll("( )+",ONE_SPACE).trim();

        if (tmpStr.trim().substring(0, 2).equalsIgnoreCase("03"))
        {

            for( int i = 0; i < numOfTimes; i++ )
              {
                //sb.append( tmpStr );  

                 holdRecord.add(innerCnt4, tmpStr);
                 tmpStr = holdRecord.get(innerCnt4);
                 innerCnt4++;
              }
            if (innerCnt5 == innerCnt3 + 1)
            {
                break;
            }
            innerCnt3++;
        }

        if (!tmpStr.trim().substring(0, 2).equalsIgnoreCase("03"))
        {

            break;
        }
    }
    return tmpStr;
}
私有静态字符串mergeFieldName(字符串元素,int j,int numOfTimes)
{
int innerCnt3=0;
int innerCnt4=0;
int innerCnt5=0;
innerCnt3=j+1;
字符串tmpStr=“”;
innerCnt4=innerCnt3;
innerCnt5=innerCnt3;
while(true)
{
tmpStr=holdRecord.get(innerCnt5);
tmpStr=tmpStr.replaceAll(“()+”,一个空格).trim();
if(!tmpStr.trim().substring(0,2).equalsIgnoreCase(“03”))
{
打破
}
innerCnt5++;
}
while(true)
{
tmpStr=holdRecord.get(innerCnt4);
tmpStr=tmpStr.replaceAll(“()+”,一个空格).trim();
if(!tmpStr.trim().substring(0,2).equalsIgnoreCase(“03”))
{
打破
}
innerCnt4++;
}
while(true)
{
tmpStr=holdRecord.get(innerCnt3);
tmpStr=tmpStr.replaceAll(“()+”,一个空格).trim();
if(tmpStr.trim()子字符串(0,2).equalsIgnoreCase(“03”))
{
for(int i=0;i
以下是实现此目的的一些代码:

ArrayList<String> list = new ArrayList<String>(
  Arrays.asList("02, String1", "\n03, Num1", "\n03, Num2", "\n02, String2"));

int numberOfTimes = 4;

// always starts and ends with 02, so this is sufficient
int count3s = list.size() - 2;

String last = list.remove(list.size() - 1); // remove last 02

// optimization to prevent repeated resizing of the array
list.ensureCapacity(2 + numberOfTimes * count3s);

// we already have them once, so just repeat numberOfTimes-1 times
for (int i = 0; i < numberOfTimes-1; i++) 
for (int j = 0; j < count3s; j++)
   list.add(list.get(j+1));

list.add(last);  // add last 02 back

System.out.println(list);

不需要太复杂。您可以像这样使用简单的cade:

// original list
List<String> list = new ArrayList<String>(Arrays.asList("02, String1", "03, Num1", 
                                         "03, Num2", "02, String2"));
int numToAdd = 3; // number of additional entries
int spos=0; // starting position of insertion
List<String> list03 = new ArrayList<String>(); // list to hold all 03 entries
for (int i=0; i<list.size(); i++) {
    if (list.get(i).contains("03,")) {
        if (spos == 0) spos = i; // set only once
        list03.add(list.get(i));
    }
}
// add list03 into main list numToAdd times
for (int i=0; i<numToAdd; i++)
    list.addAll(spos, list03);
// print the main list
for (String s: list)
    System.out.println(s);

那么,你的问题在哪里?你试过什么?你被困在哪里了?这是家庭作业吗?:)听起来像是世界编程大赛决赛中的一个问题……如果你得到
02 03 02
,会发生什么?是连续的
03
被重复,还是在采访/不采访其他人的情况下从前到后的
03
还是什么?总是以02开头,以02结尾(02 03 03 03 02)是03必须重复,在Odery中你也可以使用
列表。添加(1,list.get(j+1))
list.add(1+count3s,list.get(j+1)):这避免删除最后一个字段,并插入为needed@cl-r好的,第一个循环不起作用,因为您一直在尝试插入相同的元素,而第二个循环需要反转循环(即(int j=count3s-1;j>=0;j--)
)。我选择删除并重新插入,因为这不需要任何元素移动,这在ArrayList中是一个昂贵的操作。
[02, String1, 
03, Num1, 
03, Num2, 
03, Num1, 
03, Num2, 
03, Num1, 
03, Num2, 
03, Num1, 
03, Num2, 
02, String2]
// original list
List<String> list = new ArrayList<String>(Arrays.asList("02, String1", "03, Num1", 
                                         "03, Num2", "02, String2"));
int numToAdd = 3; // number of additional entries
int spos=0; // starting position of insertion
List<String> list03 = new ArrayList<String>(); // list to hold all 03 entries
for (int i=0; i<list.size(); i++) {
    if (list.get(i).contains("03,")) {
        if (spos == 0) spos = i; // set only once
        list03.add(list.get(i));
    }
}
// add list03 into main list numToAdd times
for (int i=0; i<numToAdd; i++)
    list.addAll(spos, list03);
// print the main list
for (String s: list)
    System.out.println(s);
02, String1
03, Num1
03, Num2
03, Num1
03, Num2
03, Num1
03, Num2
03, Num1
03, Num2
02, String2