java - 如何检查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);
}
这就是我得到的全部。任何人都可以帮忙吗?
解决方案
更新:
- 您的代码不起作用的原因是您正在比较对 a 的引用
Player
与String
. 您需要做的是name
与玩家的姓名(即names.get(i).getName()
)进行比较。 - 此外,当您比较两个
String
值时,您应该使用String#equals
而不是使用比较它们的引用==
。如果您想以String
不区分大小写的方式比较这两个值,您可以String#equalsIgnoreCase
随意使用。 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);
}
}
推荐阅读
- python-3.x - 如何比较两次值?
- android - 当浏览器在后台时,如何从隐式意图启动活动?
- python - 无论树中的位置如何,Python json都会删除所有键实例
- python - Pandas 1.1.0 应用功能正在改变行
- angularjs - 重新加载页面AngularJs后找不到页面
- mysql - MariaDB 中的预约调度系统
- typescript - 从函数参数推断对象属性
- docker - 连接容器的 Docker 网络错误
- cakephp - 如何在 cakephp 连接表中应用 sum?
- angular - 让 MediaRecorder 在 Angular 9 中工作的问题