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

Java查找字符串重复字符拼接新字符串的代码报错排查

字符串重复字符拼接功能代码修复

功能规则

  • 方法入参为字符串,例如入参aabullc
  • 处理完成后返回值应为aall,规则是提取所有出现2次的字符,每个字符连续拼接2次按原顺序组合
  • 入参保证不会出现同一字符重复次数超2次的场景,例如包含3个a的aaabullc永远不会作为入参传入

原代码存在的问题

  • 局部变量未初始化:声明String returnString;后未赋初始值,Java中局部变量必须显式初始化后才能执行操作,直接调用concat方法会直接触发编译错误,需要初始化为空字符串""。
  • 内层循环条件书写错误:内层for循环的终止判断误写为i<S.length()-1-i,内层循环的控制变量是j,正确的终止条件应为j < S.length()。原错误写法一方面会导致遍历逻辑完全不符合设计预期,另一方面j持续自增超出字符串索引范围后会抛出StringIndexOutOfBoundsException运行时异常。
  • 拼接逻辑不符合输出要求:匹配到重复字符时仅拼接1次目标字符,按照需求每个重复字符需要拼接2次(例如重复的a要输出aa),原逻辑最终输出长度仅为预期的一半,无法得到aall的结果。
  • 匹配到重复项后无中断逻辑:找到当前i位置字符的重复项后没有终止内层循环,会产生无意义的后续遍历,属于冗余逻辑。

修复后可直接运行的代码

public static String rearrangeLetters(String S)
{
    // 初始化返回值为空字符串
    String returnString = "";

    for(int i = 0; i < S.length() - 1; i++){
        // 修正内层循环判断条件,从i+1位置遍历到字符串末尾
        for(int j = i + 1; j < S.length(); j++){
            if(S.charAt(i) == S.charAt(j)){
                String targetChar = String.valueOf(S.charAt(i));
                // 重复字符拼接2次,匹配输出要求
                returnString = returnString.concat(targetChar).concat(targetChar);
                // 匹配到重复项后跳出内层循环,避免冗余遍历
                break;
            }
        }
    }

    System.out.println(returnString);
    return returnString;
}

验证说明

传入测试用例aabullc时,代码会按顺序识别到索引0、1位置的a为重复字符,索引3、4位置的l为重复字符,最终拼接得到aall,完全符合预期结果。由于题目限定每个字符最多出现2次,不需要额外增加去重判断,不会出现重复拼接问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:45:44