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

Java移除字符串连续重复字符:代码未达预期输出求助

问题分析与修复

输入字符串为aabbbcabcaa,期望输出为cabc,即只保留字符串中**单独出现(无连续重复)**的字符,所有连续重复的字符组(如aa、bbb)全部移除。

原代码的问题

  1. 循环起始位置错误:从i=2开始遍历,直接跳过了前两个字符的判断逻辑,无法处理开头的连续重复组。
  2. 判断逻辑完全不符合需求:原条件input.charAt(i) != input.charAt(i - 1) & input.charAt(i - 1) != input.charAt(i - 2)是在判断当前字符与前一个、前前一个都不同,这和“保留无连续重复的字符”的需求毫无关联,无法正确筛选出目标字符。
  3. 位运算符误用:使用了&(按位与)而非&&(逻辑与),虽然此处结果可能一致,但属于语法规范问题。

修复后的代码

public class RemoveConsecutiveDuplicates {

    public static void main(String[] args) {
        String input = "aabbbcabcaa";
        System.out.println(removeConsecutiveDuplicates(input));
    }

    public static String removeConsecutiveDuplicates(String input) {
        if (input == null || input.length() <= 1) {
            return input;
        }
        StringBuilder result = new StringBuilder();
        int length = input.length();
        
        for (int i = 0; i < length; i++) {
            char current = input.charAt(i);
            // 判断当前字符是否是单独出现的(无连续重复)
            boolean isSingle = false;
            if (i == 0) {
                // 第一个字符,只需判断是否和下一个不同
                isSingle = (current != input.charAt(i + 1));
            } else if (i == length - 1) {
                // 最后一个字符,只需判断是否和前一个不同
                isSingle = (current != input.charAt(i - 1));
            } else {
                // 中间字符,需同时和前后都不同
                isSingle = (current != input.charAt(i - 1)) && (current != input.charAt(i + 1));
            }
            if (isSingle) {
                result.append(current);
            }
        }
        return result.toString();
    }
}

代码说明

  1. 边界处理:先判断输入为空或长度≤1的情况,直接返回原字符串,避免数组越界。
  2. 逐字符判断:
    • 首字符:仅需和下一个字符比较,不同则保留
    • 尾字符:仅需和前一个字符比较,不同则保留
    • 中间字符:需同时和前后字符都不同,才判定为单独出现的字符,加入结果
  3. 逻辑运算符修正:使用&&替代&,符合逻辑判断的语法规范。

运行上述代码,输入aabbbcabcaa将输出cabc,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 20:44:53