从数组列表中删除一个字符串

use*_*881 2 java arrays runtime-error compiler-errors arraylist

我一直收到这个错误:

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

mo *_*ean 7

如果你想删除"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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Cod*_*Ray 7

让我们来看看这个算法吧.

我们从这个列表开始.我们将按插入顺序对Megs进行编号,以便更容易跟踪(已经有两个,我们也用"Meg"替换其他名称).

0: Chris
1: Lois
2: Meg#1
3: Meg#2
4: Brain
5: Peter
6: Stewie
Run Code Online (Sandbox Code Playgroud)

我们开始i=0并致电name.remove(0).因此索引0(Chris)被删除,所有剩余的元素向左移动(向下移动索引):

0: Lois
1: Meg#1
2: Meg#2
3: Brain
4: Peter
5: Stewie
Run Code Online (Sandbox Code Playgroud)

请注意,列表现在是一个较小的元素.

该调用name.set(0)用Meg(#3)替换索引0(现在是Lois).

0: Meg#3
1: Meg#1
2: Meg#2
3: Brain
4: Peter
5: Stewie
Run Code Online (Sandbox Code Playgroud)

这结束了循环的第一遍.现在i=1.

我们删除了索引1(Meg#1),这让我们得到:

0: Meg#3
1: Meg#2
2: Brain
3: Peter
4: Stewie
Run Code Online (Sandbox Code Playgroud)

并用Meg(#4)替换索引1:

0: Meg#3
1: Meg#4
2: Brain
3: Peter
4: Stewie
Run Code Online (Sandbox Code Playgroud)

现在i=2.删除索引2:

0: Meg#3
1: Meg#4
2: Peter
3: Stewie
Run Code Online (Sandbox Code Playgroud)

将指数2(彼得)替换为梅格(#5)

0: Meg#3
1: Meg#4
2: Meg#5
3: Stewie
Run Code Online (Sandbox Code Playgroud)

现在i=3.删除索引3:

0: Meg#3
1: Meg#4
2: Peter
Run Code Online (Sandbox Code Playgroud)

现在我们尝试设置索引3,但它不存在.所以我们得到一个例外.

java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
Run Code Online (Sandbox Code Playgroud)

这表明该列表有3个元素(size = 3),我们尝试访问索引3(但最大索引现在是2).