You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java字符串数组删除指定元素时Scanner输入值不生效问题

问题根因

  • 字符串比较错误使用==而非equals()

Java中==用于对象比较时判断的是内存地址是否相同,而非内容是否一致。硬编码的同内容字符串会被JVM字符串常量池优化指向同一块内存,所以==暂时生效;而Scanner.next()返回的是运行时新创建的字符串对象,和数组中常量字符串的内存地址不同,==直接返回false,导致匹配逻辑失效。

  • remove函数的业务逻辑写反,且存在不必要的性能损耗

你当前代码的判断条件是element[i] == value时保留元素,和你「删除指定元素」的预期完全相反;同时你将新数组创建、数组拷贝逻辑放在for循环内部,每轮循环都会重复执行,属于无用的性能开销。

修正方案

修正后的remove函数代码

import java.util.Objects;

public static String[] remove(String[] element, String value) {
    int validSize = 0;
    // 第一轮遍历统计需要保留的元素数量
    for (String item : element) {
        // 用Objects.equals避免空指针异常
        if (!Objects.equals(item, value)) {
            validSize++;
        }
    }
    String[] nElements = new String[validSize];
    int idx = 0;
    // 第二轮遍历填充新数组
    for (String item : element) {
        if (!Objects.equals(item, value)) {
            nElements[idx++] = item;
        }
    }
    return nElements;
}

调用侧适配说明

修正后不管是硬编码赋值value还是用Scanner.next()获取用户输入,都能正常执行删除逻辑,无需额外修改调用代码。


内容的提问来源于stack exchange,提问作者GBR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 12:15:03