2

次の文字列を持つ配列リストがあります。

02, String1 
03, Num1
03, Num2
02, String2

別のメソッドからの入力に基づいて、03 で始まる文字列を繰り返してから、同じ arraylist の回数 = 4 の出力に戻す必要があります。

02, String1 
03, Num1
03, Num2
03, Num1
03, Num2
03, Num1
03, Num2
03, Num1
03, Num2
02, String2

助けてください、

前もって感謝します。

これまでに作成したコードには、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;
}
4

2 に答える 2

1

これを実現するためのコードを次に示します。

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);

版画:

[02, String1, 
03, Num1, 
03, Num2, 
03, Num1, 
03, Num2, 
03, Num1, 
03, Num2, 
03, Num1, 
03, Num2, 
02, String2]
于 2013-08-23T08:11:14.460 に答える
0

それほど複雑である必要はありません。次のような単純な 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, String1
03, Num1
03, Num2
03, Num1
03, Num2
03, Num1
03, Num2
03, Num1
03, Num2
02, String2
于 2013-08-23T09:31:05.497 に答える