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

如何替换字符串中相邻重复的第二个字符?Java实现求助

问题分析与解决

你的代码存在几个关键错误,导致无法实现需求:

  • 数组越界问题:
    • 外层循环z <= test.length,数组索引从0开始到length-1,test数组长度为1时,z=1会触发test[1]数组越界异常,应改为z < test.length。
    • 内层循环i <= test[z].length(),字符串索引范围是0到length()-1,i+1会超出有效索引范围,应改为i < test[z].length() - 1。
  • String不可变特性误用:
    Java的String是不可变对象,replace()方法会返回新字符串,不会修改原字符串,你没有将返回值赋值给test[z],所以原字符串完全没变化。
  • replace方法逻辑错误:
    replace(char oldChar, char newChar)会替换字符串中所有匹配的oldChar,不是只替换你指定的相邻重复字符,不符合需求。

正确实现代码

要实现「替换相邻重复的第二个字符、避免相邻字符相同」的需求,正确做法是将字符串转为可变的char数组,遍历修改后再转回字符串:

public class Main {
    public static void main(String[] args) {
        String[] test = {"aaaabbbb"};
        char replaceChar = 'z';

        // 遍历字符串数组
        for (int z = 0; z < test.length; z++) {
            char[] charArr = test[z].toCharArray();
            // 从第二个字符开始,对比前一个字符是否重复
            for (int i = 1; i < charArr.length; i++) {
                if (charArr[i] == charArr[i-1]) {
                    // 替换当前重复的字符
                    charArr[i] = replaceChar;
                }
            }
            // 将修改后的char数组转回字符串,存回原数组
            test[z] = new String(charArr);
            System.out.println(test[z]); // 输出:azazazazbzbzbz
        }
    }
}

代码说明:

  1. 转char数组:数组是可变结构,直接修改元素比操作不可变的String更高效,也更贴合需求。
  2. 遍历对比:从索引1开始,检查当前字符与前一个是否相同,相同则替换当前字符为指定的非原字符。
  3. 转回字符串:修改完成后,将char数组转为新String对象,赋值回原字符串数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:30:25