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

为何这段StringBuilder字符串压缩代码无法输出预期结果?

字符串压缩功能的代码修正

原代码的问题

  • count初始值错误:当前字符本身应算1次,原代码设为0会导致统计少1次
  • 压缩逻辑错误:当字符重复次数大于1时,原代码重复追加字符,而非追加重复次数的数值
  • 边界处理疏漏:未正确处理单个字符或末尾字符的统计

修正后的代码

import java.util.*;
public class string_compression {

    public static String compress(String str){
        // 空字符串直接返回
        if(str.isEmpty()) return str;
        
        StringBuilder sb = new StringBuilder();
        // 初始count为1,当前字符本身算一次
        int count = 1;

        for(int i=0;i<str.length();i++){
            // 检查下一个字符是否相同,同时避免越界
            while(i < str.length()-1 && str.charAt(i) == str.charAt(i+1)){
                count++;
                i++;
            }
            // 追加当前字符
            sb.append(str.charAt(i));
            // 重复次数大于1时追加次数
            if(count > 1){
                sb.append(count);
            }
            // 重置count为下一组字符做准备
            count = 1;
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter your string: ");
        String str = sc.nextLine();
        System.out.println("Compressed string is : ");
        System.out.println(compress(str));
        sc.close();
    }
}

修正说明

  1. count初始化:将count初始值设为1,确保当前字符的首次出现被统计
  2. 压缩逻辑修正:当count>1时,追加的是count的数值,而非重复字符,实现正确的压缩格式(如"aaa"→"a3")
  3. 重置count:每处理完一组连续字符后,重置count为1,保证下一组字符统计正确
  4. 空字符串处理:增加空字符串判断,避免不必要的遍历

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 12:35:09