我正在尝试使用ArrayList和for循环删除字符串匹配“Meg”。到目前为止,我已经编写了下面的代码,不知道为什么它不起作用。我认为问题出在下面while
循环
while((customerName.get(i)).equals("Meg"))
{
customerName.remove(i);
}
提前致谢。
完整代码如下:
import java.util.ArrayList;
public class CustomerLister2
{
public static void main(String[] args)
{
ArrayList<String> customerName = new ArrayList<String>();
customerName.add("Chris");
customerName.add("Lois");
customerName.add("Meg");
customerName.add("Peter");
customerName.add("Stewie");
customerName.add(3, "Meg");
customerName.add(4, "Brian");
int currentSize = customerName.size();
for(int i = 0; i < currentSize - 1; i++)
{
while((customerName.get(i)).equals("Meg"))
{
customerName.remove(i);
}
}
for(String newStr: customerName)
{
System.out.println(newStr);
}
}
}
答案 0 :(得分:2)
将其更改为以下
for(int i = 0; i < currentSize; i++)
{
if((customerName.get(i)).equals("Meg"))
{
customerName.remove(i);
i--; //because a new element may be at i now
currentSize = customerName.size(); //size has changed
}
}
答案 1 :(得分:1)
或者,如果您不必使用for循环:
public static void main(String[] args) {
ArrayList<String> customerName = new ArrayList<String>();
customerName.add("Chris");
customerName.add("Lois");
customerName.add("Meg");
customerName.add("Peter");
customerName.add("Stewie");
customerName.add(3, "Meg");
customerName.add(4, "Brian");
while (customerName.remove("Meg")) {}
for (String s : customerName) {
System.out.println(s);
}
}
答案 2 :(得分:0)
这会对你有所帮助
System.out.println("Customer Name (including Meg)"+customerName);
for(int i=0; i<customerName.size(); i++)
{
String s = customerName.get(i);
if(s.equals("Meg"))
{
customerName.remove(i);
i--;
}
}
System.out.println("Customer Name (excluding Meg)"+customerName);
答案 3 :(得分:0)
使用iterator customerName.iterator()
(iterator()是非静态方法)
迭代器负责列表的计数修改。当我们使用for
循环时,我们可能忘记处理列表的计数修改。
Iterator<String> itr= customerName.iterator();
while(itr.hasNext())
{
if(itr.next().equals("Meg")){
itr.remove();
}
}
在迭代器中还有缺点。如果两个线程同时访问同一个列表对象,它就不起作用。防爆。一个线程正在读取,另一个线程正在从列表中删除元素,然后它会抛出java.util.ConcurrentModificationException.
更好地在并发场景中使用Vector
。
如果您仍想使用相同的for
循环,请添加以下代码行。
int currentSize = customerName.size();
for(int i = 0; i < currentSize; i++)
{
while((customerName.get(i)).equals("Meg"))
{
customerName.remove(i);
currentSize = customerName.size(); //add this line to avoid run-time exception.
}
}