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
相关产品推荐
相关产品推荐

