[英]remove a string from an array list
我一直收到这个错误:
java.lang.IndexOutOfBoundsException:索引:3,大小:3
我试图删除字符串“梅格”,它将编译,但我不断收到此错误。
import java.util.ArrayList;
public class CustomerLister2 {
public static void main (String[] args) {
ArrayList<String> name = new ArrayList<String>();
name.add("Chris");
name.add("Lois");
name.add("Meg");
name.add("Meg");
name.add("Brain");
name.add("Peter");
name.add("Stewie");
for ( int i = 0; i < name.size(); i++){
name.get(i);
name.remove(i);
name.set(i,"Meg");
}
for(String names: name){
System.out.println(names);
}
}
}
如果你想删除"Meg"
然后使用它
import java.util.ArrayList;
public class CustomerLister2 {
public static void main (String[] args) {
ArrayList<String> name = new ArrayList<String>();
name.add("Chris");
name.add("Lois");
name.add("Meg");
name.add("Meg");
name.add("Brain");
name.add("Peter");
name.add("Stewie");
for ( int i = 0; i < name.size(); i++){
String tempName = name.get(i);
if(tempName.equals("Meg"){
name.remove(i);
}
}
for(String names: name){
System.out.println(names);
}
}
}
让我们来看看这个算法吧。
我们从这个列表开始。 我们将按插入顺序对Megs进行编号,以便更容易跟踪(已经有两个,我们也用“Meg”替换其他名称)。
0: Chris
1: Lois
2: Meg#1
3: Meg#2
4: Brain
5: Peter
6: Stewie
我们从i=0
开始并调用name.remove(0)
。 因此索引0(Chris)被删除,所有剩余的元素向左移动(向下移动索引):
0: Lois
1: Meg#1
2: Meg#2
3: Brain
4: Peter
5: Stewie
请注意,列表现在是一个较小的元素。
调用name.set(0)
用Meg(#3)替换索引0(现在是Lois)。
0: Meg#3
1: Meg#1
2: Meg#2
3: Brain
4: Peter
5: Stewie
这结束了循环的第一遍。 现在i=1
。
我们删除了索引1(Meg#1),这让我们得到:
0: Meg#3
1: Meg#2
2: Brain
3: Peter
4: Stewie
并用Meg(#4)替换索引1:
0: Meg#3
1: Meg#4
2: Brain
3: Peter
4: Stewie
现在i=2
。 删除索引2:
0: Meg#3
1: Meg#4
2: Peter
3: Stewie
将指数2(彼得)替换为梅格(#5)
0: Meg#3
1: Meg#4
2: Meg#5
3: Stewie
现在i=3
。 删除索引3:
0: Meg#3
1: Meg#4
2: Peter
现在我们尝试设置索引3,但它不存在。 所以我们得到一个例外。
java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
这表明该列表有3个元素(size = 3),我们尝试访问索引3(但最大索引现在是2)。
调用remove()
然后set()
可能不是你想要做的。 也许您只是想调用set()
来覆盖该索引处的现有元素,而不删除?
Remove从列表中删除元素,add添加元素,set仅在指定的索引存在时有效。
for ( int i = 0; i < name.size(); i++){
String oldName = name.get(i);
name.set( i, "Meg");
}
ArrayLists的大小可变。 当你命名.remove(i)时,列表会变小。 然后尝试将元素设置为现在不存在的索引。 您要么不需要name.remove(i)或将name.set(i,“Meg”)更改为name.add(i,“Meg”)。
http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html
编辑
另请注意,您的代码正在删除索引i处的每个元素。 这可能就是为什么每次都在索引3处获得异常的原因。 您删除元素0,列表变小。 然后删除元素1,列表变小。 依此类推,直到你的for循环中的i == 3,并且列表中只有3个元素。
删除(索引)将删除该项目并移动上面的其他项目。
对于i = 0,在循环场景之后 -
克里斯删除。
0兆(在lois上覆盖)
1兆
2兆
3脑
4彼得
5 stewei
对于i = 1,在循环场景之后
0兆
(meg删除的指数转移)
1兆(在最后一个meg上覆盖)
2脑
3彼得
4 stewei
循环后i = 2
0兆
1兆
(脑部删除,指数转移)
2彼得
3 stewei
当删除stewei时i = 3
0兆
1兆
2彼得
没有索引3可用....因此错误即将来临。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.