首页 > 解决方案 > 如何检查arraylist中是否存在字符串

问题描述

我有一个 Player 对象的 ArrayList,如下所示:

ArrayList<Player> names = new ArrayList<Player>();

我想比较用户输入的字符串以查看它是否在数组列表中,如果它在数组列表中,我想将其从列表中删除。

System.out.print("Enter name of player to remove: ");
    String name = h.next();
          for (int i = 0; i < names.size(); i++){
              Player temp = names.get(i);
                 if (temp == name){
                   names.remove(i);
                }

这就是我得到的全部。任何人都可以帮忙吗?

标签: javaarraylist

解决方案


更新:

  1. 您的代码不起作用的原因是您正在比较对 a 的引用PlayerString. 您需要做的是name与玩家的姓名(即names.get(i).getName())进行比较。
  2. 此外,当您比较两个String值时,您应该使用String#equals而不是使用比较它们的引用==。如果您想以String不区分大小写的方式比较这两个值,您可以String#equalsIgnoreCase随意使用。
  3. Scanner#next一旦遇到空格就停止扫描。这意味着h.next()不会读取带有空格的名称,例如John Smith. 你应该使用Scanner#nextLine来避免这种情况。

Case-1:当你想移除名字与输入名字匹配的所有玩家时

String name = h.nextLine();
for (int i = 0; i < names.size(); i++) {
    Player temp = names.get(i);
    if (temp.getName().equalsIgnoreCase(name)) {
        names.remove(i);
    }
}

案例2:

当您只想删除名称与输入名称匹配的第一个玩家时

String name = h.nextLine();
for (int i = 0; i < names.size(); i++) {
    Player temp = names.get(i);
    if (temp.getName().equalsIgnoreCase(name)) {
        names.remove(i);
        break;// Break the loop after removing the matching player
    }
}

如您所见,该break;语句会在匹配的玩家被移除后导致循环中断。

原答案:

您应该将每个Player的名称与输入进行比较。

String name = h.next();
for (int i = 0; i < names.size(); i++){
    Player temp = names.get(i);
    if (temp.getName().equals(name)){
        names.remove(i);
    }
}

推荐阅读