我必须编辑字符串列表:
- 如果包含“h”字母,则删除该值;
- 如果包含“h”和“o”,则不执行任何操作
- 如果值包含字母“o”,则将其重复添加到列表中。
我坚持了制作副本的步骤。 怎么了?为什么会发生?
这是代码:
public class MyClass {
public static void main(String[] args) throws Exception {
ArrayList<String> list = new ArrayList<String>();
list.add("hi"); // this one have to be removed
list.add("hello"); // this one have to be left without changes
list.add("ops"); // duplicate must be added to the list
list = fix(list);
for (String s : list) {
System.out.println(s);
}
}
public static ArrayList<String> fix(ArrayList<String> list) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).contains("h") && list.get(i).contains("o")) ;
// do nothing
else if (list.get(i).contains("h"))
list.remove(i);
else if (list.get(i).contains("o")) {
// The problem is here ===>
list.add(i + 1, list.get(i));
}
}
return list;
}
}
我也尝试过:
String s = new String(list.get(i));
list.add(i+1, s);
最佳答案
您正在添加一个元素,并且您正在再次检查它并再次添加一个元素。这会造成无限循环。这将解决你的问题。将检查索引向前移动以防止这种无限循环
else if (list.get(i).contains("h"))
{
list.remove(i);
i--;
}
else if (list.get(i).contains("o"))
{
list.add(i+1, list.get(i));
i++;
}
此外,删除元素时需要减小 i
关于java - 如何将重复值添加到ArrayList中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27482528/