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

Java游程解码问题:无前导数字的字符未被识别

解决Java游程解码忽略无前导数字字符的问题

搞定这个游程解码的问题很简单!你的程序现在漏掉无前导数字的字符,核心原因是逻辑只处理了「数字+字符」的组合,没考虑到那些单独出现的字符——这类字符默认应该重复1次对吧?

问题根源

你原来的代码大概率只会在识别到数字前缀时才处理后续字符,遇到没有数字的单个字符(比如示例里的c和d)就直接跳过了。我们需要调整逻辑,让程序能区分两种情况:

  • 带数字前缀的字符:按指定次数重复
  • 无数字前缀的字符:默认重复1次

修复后的完整代码

下面是调整后的解码程序,已经处理了所有情况,包括多位数重复、单个字符等:

public class RunLengthDecoder {
    public static void main(String[] args) {
        // 检查是否传入了编码字符串参数
        if (args.length == 0) {
            System.out.println("请在运行时传入游程编码字符串作为参数,例如:java RunLengthDecoder 5A5Bcd");
            return;
        }
        
        String encodedStr = args[0];
        String decodedStr = decodeRunLength(encodedStr);
        System.out.println("解码结果:" + decodedStr);
    }

    private static String decodeRunLength(String encoded) {
        StringBuilder result = new StringBuilder();
        StringBuilder numBuffer = new StringBuilder(); // 用来累积连续的数字字符(处理多位数)

        for (char currentChar : encoded.toCharArray()) {
            if (Character.isDigit(currentChar)) {
                // 如果是数字,先累积到缓冲区
                numBuffer.append(currentChar);
            } else {
                // 计算重复次数:有数字就用数字,没有则默认1
                int repeatCount = numBuffer.length() > 0 ? Integer.parseInt(numBuffer.toString()) : 1;
                // 将当前字符重复指定次数后加入结果
                result.append(String.valueOf(currentChar).repeat(repeatCount));
                // 重置数字缓冲区,准备下一轮
                numBuffer.setLength(0);
            }
        }

        return result.toString();
    }
}

关键逻辑说明

  1. 数字缓冲区numBuffer:用来收集连续的数字字符,支持多位数的游程编码(比如10Z会被解码成10个Z)
  2. 非数字字符处理:
    • 当遇到非数字字符时,先检查numBuffer是否有内容:如果有,就把缓冲区的数字转成整数作为重复次数;如果没有,就默认重复1次
    • 处理完当前字符后,立即重置numBuffer,确保下一个字符的处理不受影响
  3. 边界情况覆盖:
    • 空输入:返回空字符串
    • 单个无数字字符(比如X):返回X
    • 混合编码(比如2Ab3Cd):解码成AbbCCCd

测试示例

运行命令:

java RunLengthDecoder 5A5Bcd

输出结果:

解码结果:AAAAABBBBBcd

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:09:59