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

Java实现字符串指定字母移除(保留非字母、不修改原串)问题排查

代码错误点说明
  • 循环逻辑写崩了:遍历arg字符的for循环里,只要遇到第一个非数字字符就直接return result,后续所有逻辑都不会执行。比如传参ra6时,第一次循环碰到非数字的r就直接返回字符串"r",根本不会处理后面的a。
  • 过滤规则理解错了:需求是只有arg里的字母才需要作为移除依据,非字母(数字、标点等)完全不用管,你现在只过滤了数字,标点符号会被当成要移除的内容;而且你用replaceAll(result,"")是匹配完整子串替换,不是逐个删除字符,完全达不到逐字符移除的效果。
  • 语法使用错误:判断空字符串用了==,Java中字符串值比较必须用equals()方法,==比较的是对象内存地址,很容易出现判断失效的问题;另外你还写了this.myString=""直接修改成员变量,违反了「不得修改原myString内容」的要求。
  • 没做大小写兼容:需求明确要求字母匹配不区分大小写,现有代码完全没处理大小写转换,大写和小写的同字母会匹配失败。
正确实现代码

实现逻辑:

  1. 先遍历arg,把里面所有字母字符统一转成小写,存到Set集合里作为待移除字符清单,所有非字母字符直接跳过,不加入清单
  2. 如果待移除清单是空的,直接返回原字符串即可
  3. 逐字符遍历原myString,每个字符转小写后判断是否在待移除清单里,不在的话就拼接到结果串里,全程不修改原成员变量的值
import java.util.HashSet;
import java.util.Set;

public class StringProcessor {
    private String myString;

    public StringProcessor(String myString) {
        this.myString = myString;
    }

    public String remove(String arg) {
        // 原串为空直接返回空字符串
        if (myString == null || myString.isEmpty()) {
            return "";
        }

        // 收集所有需要移除的字母(统一转小写,实现不区分大小写匹配)
        Set<Character> removeChars = new HashSet<>();
        for (char c : arg.toCharArray()) {
            if (Character.isLetter(c)) {
                removeChars.add(Character.toLowerCase(c));
            }
        }

        // 没有需要移除的字母,直接返回原串
        if (removeChars.isEmpty()) {
            return myString;
        }

        // 逐字符拼接结果,不修改原myString
        StringBuilder result = new StringBuilder();
        for (char c : myString.toCharArray()) {
            if (!removeChars.contains(Character.toLowerCase(c))) {
                result.append(c);
            }
        }
        return result.toString();
    }

    // 测试验证
    public static void main(String[] args) {
        StringProcessor processor = new StringProcessor("my lucky numbers are 6, 8, and 19.");
        // 测试用例1 输出:my lucky numbes e 6, 8, nd 19.
        System.out.println(processor.remove("ra6"));
        // 测试用例2 输出原串:my lucky numbers are 6, 8, and 19.
        System.out.println(processor.remove("6,."));
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:42:19