Java 在ArrayList中重复多行并按顺序将其添加回同一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
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