Java 删除arraylist中特定字符串的正确方法是什么?

Java 删除arraylist中特定字符串的正确方法是什么?,java,arraylist,Java,Arraylist,我正在制作一个添加/删除注册车牌号的程序,但是当我删除一个特定的车牌号时,我遇到了麻烦。这是我代码的一些部分 ArrayList<String> PlateNumber = new ArrayList<String>(10); System.out.println("Enter your Plate Number : "); Scanner pn = new Scanner(System.in); String PlateNumberxx = pn.nextLine()

我正在制作一个添加/删除注册车牌号的程序,但是当我删除一个特定的车牌号时,我遇到了麻烦。这是我代码的一些部分

ArrayList<String> PlateNumber = new ArrayList<String>(10);

System.out.println("Enter your Plate Number : ");
Scanner pn = new Scanner(System.in);
String PlateNumberxx = pn.nextLine();

System.out.println("Log in / Log out: ");
Scanner YoN = new Scanner(System.in);
String des = YoN.nextLine();

if(des.equals("log in")) {
    PlateNumber.add(PlateNumberxx);
}

if(des.equals("log out")){
    PlateNumber.remove(PlateNumberxx);
    System.out.println("Time log out : " + PlateNumberxx + " " + d);
}
ArrayList PlateNumber=新的ArrayList(10);
System.out.println(“输入车牌号:”);
扫描仪pn=新扫描仪(系统英寸);
字符串PlateNumberxx=pn.nextLine();
System.out.println(“登录/注销:”);
扫描器YN=新扫描器(System.in);
字符串des=YoN.nextLine();
如果(des.equals(“登录”)){
平板编号。添加(平板编号xx);
}
如果(des.equals(“注销”)){
板号。拆下(板号XX);
System.out.println(“时间注销:+PlateNumberxx+”+d);
}

它不会删除我在扫描仪中输入的内容。我的代码中有什么问题?

当您试图删除元素时,列表是如何初始化的,我不确定。我猜这就是你的问题所在

但是,为了删除元素,您的代码正在工作

这里是添加到该列表中的元素。我打印出列表中删除前后的内容

public static void main(final String[] args) {
    final List<String> plateNumber = new ArrayList<String>(10);
    plateNumber.add("123");

    System.out.println("Plate Numbers to begin with: " + plateNumber.toString());

    System.out.println("Enter your Plate Number : ");
    final Scanner pn = new Scanner(System.in);
    final String plateNumberxx = pn.nextLine();

    System.out.println("Log in / Log out: ");
    final Scanner YoN = new Scanner(System.in);
    final String des = YoN.nextLine();

    if(des.equals("log in")) {
        plateNumber.add(plateNumberxx);
    }

    if(des.equals("log out")){
        plateNumber.remove(plateNumberxx);
        System.out.println("Time log out : " + plateNumberxx + " ");
        System.out.println("Plate Numbers after removal: " + plateNumber.toString());
    }
}
publicstaticvoidmain(最终字符串[]args){
最终列表编号=新的ArrayList(10);
车牌号。添加(“123”);
System.out.println(“以“+plateNumber.toString()开头的车牌号”);
System.out.println(“输入车牌号:”);
最终扫描仪pn=新扫描仪(System.in);
最终字符串plateNumberxx=pn.nextLine();
System.out.println(“登录/注销:”);
最终扫描仪YoN=新扫描仪(System.in);
最后一个字符串des=YoN.nextLine();
如果(des.equals(“登录”)){
平板编号。添加(平板编号xx);
}
如果(des.equals(“注销”)){
板号。拆下(板号XX);
System.out.println(“时间注销:+plateNumberxx+”);
System.out.println(“移除后的板号:+plateNumber.toString());
}
}
我得到的结果是:

车牌号以[123]开头

输入您的车牌号:

123

登录/注销:

注销

注销时间:123

拆除后的板号:[]


如果要从arraylist中删除值,请不要使用arraylist.remove(值)方法,而是找出它所在的索引,然后删除该索引,或者在某些情况下删除该值所在的所有索引

    ArrayList<String> list = new ArrayList<String>();
    // Random Content
    list.add("Apple");
    list.add("Banana");
    list.add("Plum");
    list.add("Orange");
    list.add("Apple");
    list.add("Pineapple");
    list.add("Peach");
    list.add("Plum");

    // Remove a value
    {
        String remove = "Apple";

        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).equals(remove)){
                list.remove(i);

                /*
                 * When we remove a value we have to iterate 1 index backwards,
                 * because the next value in the list is now shifted one index,
                 * so the list[i+1] becomes the new list[i], and in case it is the
                 * same value we have to check the new list[i] in addition, otherwise
                 * if we had two "Apple"s in a row, only the first 1 would get removed.
                 */

                i--;
            }
        }
    }
ArrayList list=new ArrayList();
//随机内容
添加(“苹果”);
添加(“香蕉”);
列表。添加(“梅花”);
列表。添加(“橙色”);
添加(“苹果”);
添加(“菠萝”);
列表。添加(“桃子”);
列表。添加(“梅花”);
//删除一个值
{
String remove=“苹果”;
对于(int i=0;i
不要创建多个扫描器,只需创建一个与
系统关联的扫描器。在
中,继续阅读。您将元素添加到列表的何处?我编辑了我的问题,您可以再次检查。正如@sergiu评论的那样,由于您没有将任何内容添加到列表中,因此没有任何内容可删除…没有明显的内容跳出。您是否尝试过单步执行代码并检查以确保要删除的值实际上在数组中并且完全匹配?如果我输入3个车牌号,然后用户键入第2个车牌号以注销,该怎么办。是否删除了()项;是否适用?目前代码没有这样做,您需要一个循环。运行循环足够多次(永久?)以允许您添加多个车牌号,然后当您删除一个车牌号时,它应该可以正常工作。有一个永久循环和一个中断,允许您在应用程序退出之前删除单个元素。我不知道您的循环终止条件是什么,因为这不在您的问题中。为什么不使用.remove()?因为.remove()函数将对象与==比较器进行比较,而==比较器不适用于对象,因为它只比较对象引用,而不比较对象值。例如:String s1=“test”;字符串s2=“测试”;然后s1==s2将给出false,因为它是对两个不同对象的两个不同引用。因此,我在代码中使用了.equals()(在java.lang.String类中被覆盖,继承自java.lang.Object类。Object类中的一个检查引用相等性)比较器,因为它比较字符串值。你怎么会这样认为?我正在查看ArrayList的1.6.031源代码,它显然使用了.equals()。第423行:如果(o.equals(elementData[index]){如果我不知道元素的索引,例如,我打印了3个车牌号,那么第二个车牌号就想注销。我如何删除第二个车牌号而不知道它的索引是什么呢?
remove
方法的契约是与
equals
进行比较。请参阅: