Java Can';无法正确进行字符串比较

Java Can';无法正确进行字符串比较,java,Java,我需要下面代码的帮助,我无法获得有关deleteNode方法的字符串比较。 我搜索了StackOverflow,非常有用,尤其是对于对象。equals 但是,运行该方法会遍历所有if语句,并且该项永远不会被删除。请原谅我的英语不是母语 我的代码: public void deleteNode(String clientAddr) { boolean isFound = false; for (ClientNode client : srv.connections) {

我需要下面代码的帮助,我无法获得有关deleteNode方法的字符串比较。 我搜索了StackOverflow,非常有用,尤其是对于对象。equals

但是,运行该方法会遍历所有if语句,并且该项永远不会被删除。请原谅我的英语不是母语

我的代码:

public void deleteNode(String clientAddr) {
    boolean isFound = false;
    for (ClientNode client : srv.connections) {
        if (Objects.equals(client.getIpAddr(), clientAddr)) {
            isFound = true;
            srv.connections.remove(clientAddr);
            break;
        }
    }
    if (!isFound) {
        System.out.println("Provided address is not found!");
        System.exit(0);
    }
}
以上信息通过以下途径调用:

starNetwork.deleteNode("10.10.10.3");
例如,如果我运行以下命令:

public void deleteNode(String clientAddr) {
    for (ClientNode client : srv.connections) {
        System.out.println(Objects.equals(client.getIpAddr(), clientAddr));
    }
}
它输出:

false
true
false

我不明白

你只检查第一个元素,如果找不到,就退出程序。 相反,尝试对其余元素进行循环

此外,不能在对象列表(ClientNode类型)中使用remove()并传递字符串。 这意味着您试图将ClientNode对象与字符串进行比较,这是不可能的。所以列表并没有删除任何元素

建议在这种情况下使用迭代器

更改:

for (ClientNode client : srv.connections) {
 if (Objects.equals(client.getIpAddr(), clientAddr)) {
            srv.connections.remove(clientAddr);
        } else {
            System.out.println("Provided address is not found!");
            System.exit(0);
        }
    }
例如:

boolean isFound = false;
for (Iterator<ClientNode> iterator = srv.connections.iterator(); iterator.hasNext();) {
    ClientNode client = iterator.next();
    if (Objects.equals(client.getIpAddr(), clientAddr)) {
        isFound = true;
        iterator.remove();
        break;
    }
}
if(!isFound) {
    System.out.println("Provided address is not found!");
    System.exit(0);
}
boolean isFound=false;
for(Iterator Iterator=srv.connections.Iterator();Iterator.hasNext();){
ClientNode client=iterator.next();
if(Objects.equals(client.getIpAddr(),clientAddr)){
isFound=true;
iterator.remove();
打破
}
}
如果(!isFound){
System.out.println(“未找到提供的地址!”);
系统出口(0);
}
如果您不想使用标志,那么在第一个If条件下写一个返回
在循环之外盲目地写一个
System.out.println(“提供的地址不是

找到了!)

问题已在下面用户Bandi Kishore的帮助下得到解答。
我的deleteNode()方法没有处理正确的类型,在迭代器的帮助下得到了修复。

请删除所有不相关的代码,并显示一个最小化的、可运行的示例。在
deleteNode
中,如果第一个客户端不是要删除的节点,则结束程序。你从不检查其余的客户端。我想从ArrayList中删除10.10.10.3。通过简单的测试,我可以看到Objects.equals(client.getIPAddr,clientAddr)在10.10.10.3中确实返回true,但我无法使其删除。为什么要退出?我怀疑这就是你想发生的事情。只有在匹配if子句时才调用出口吗?嗨@Bandi谢谢你的回答。我试过你的答案,不为我担心。运行deleteNode()后显示的输出仍然显示3个客户端。@giovanni_m还有一个错误,您试图删除不匹配的类型。我已经修改了答案,让它起作用了。啊,它起作用了!所以我所需要的只是一种迭代ArrayList中的项的方法?谢谢@Bandi