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

不使用replace()替换字符串中所有指定单词的Java代码运行无输出问题

问题排查与实现方案

现有代码的核心问题:

  • 字符长度计算错误:Python 是6个字符,你代码里取的是substring(test, test + 5),按照Java substring左闭右开的规则只能拿到5个字符,if判断永远不成立,result全程是空字符串,自然没有输出。
  • 拼接逻辑错误:就算长度修正正确,现有逻辑每匹配到一次就拼接一次完整的前后段,遇到多个匹配项时会出现内容重复拼接的问题。
  • 边界处理缺失:如果字符串中没有要匹配的目标单词,方法会直接返回空字符串,而不是原字符串。

不使用replace()的正确实现思路:

采用指针遍历的方式逐段匹配拼接,核心逻辑如下:

  1. 先获取待替换旧单词的长度,初始化结果容器和遍历起始指针
  2. 遍历字符串时每次从当前指针位置开始匹配旧单词
  3. 匹配成功就把指针到匹配位置之间的普通字符、新单词依次拼入结果,再把指针跳到旧单词结束的位置
  4. 匹配失败就把剩余所有字符拼入结果,结束遍历

修正后完整代码:

public class ReplaceWord {
    // 通用替换方法:将str中所有oldWord替换为newWord
    public static String replaceWord(String str, String oldWord, String newWord) {
        int strLen = str.length();
        int oldLen = oldWord.length();
        StringBuilder result = new StringBuilder();
        int pos = 0; // 遍历起始指针
        
        while (pos <= strLen - oldLen) {
            // 匹配当前位置是否是旧单词
            if (str.substring(pos, pos + oldLen).equals(oldWord)) {
                result.append(newWord);
                pos += oldLen; // 指针跳过硬匹配到的旧单词
            } else {
                result.append(str.charAt(pos));
                pos++; // 不匹配就移动一位指针
            }
        }
        // 拼接最后剩下的不足oldLen长度的字符
        result.append(str.substring(pos));
        return result.toString();
    }

    public static void main(String args[]) {
        String test = "Oh my god I love Python so much! Python is great!";
        // 调用方法将所有Python替换为Java
        System.out.println(replaceWord(test, "Python", "Java"));
    }
}

补充说明:代码里用StringBuilder是为了提升字符串拼接效率,如果你不想用也可以换成String直接+=,逻辑完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 07:27:03