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

如何优化Java中简易字符串解密方法的多层循环实现

优化方案

原有代码可优化点

  1. 多余的空格分割逻辑:如果你的输入本身是单个加密字符串,按\s+分割完全无必要,平白多了一层循环
  2. 多层嵌套循环可读性差,且默认只能处理1位数字的计数,无法支持连续重复超过9次的场景(比如a12会被错误解析为a重复1次、再重复2次,最终得到aaa而非预期的12个a)
  3. 缺少边界校验:如果字符串第一个字符就是数字,会出现数组越界问题

方案1:原有逻辑极简改造(无额外依赖,兼容原能力)

直接去掉多余的外层循环,用JDK内置方法代替最内层的重复追加循环,三层循环直接简化为一层:

public static String decrypt(String input) {
    StringBuilder sb = new StringBuilder();
    char[] chars = input.toCharArray();
    for (int i = 0; i < chars.length; i++) {
        if (!Character.isDigit(chars[i])) {
            sb.append(chars[i]);
            continue;
        }
        // 数字位对应前一个字符的重复次数,追加n-1次即可
        char lastChar = chars[i - 1];
        int repeatCnt = Character.getNumericValue(chars[i]) - 1;
        sb.append(String.valueOf(lastChar).repeat(repeatCnt));
    }
    return sb.toString();
}

注:String.repeat是Java 11及以上版本的内置方法,如果你使用更低版本的JDK,替换为对应次数的循环追加即可。

方案2:正则匹配实现(更简洁,支持多位重复计数)

加密后的字符串符合「非数字字符+可选数字」的固定规则,直接用正则匹配处理即可,全程只有一层逻辑,可读性更高,还能兼容超过9次的重复场景:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

// 正则提前编译,多次调用时性能更好
private static final Pattern ENCRYPT_PATTERN = Pattern.compile("([^0-9])([0-9]+)?");

public static String decryptByRegex(String input) {
    StringBuilder sb = new StringBuilder();
    Matcher matcher = ENCRYPT_PATTERN.matcher(input);
    while (matcher.find()) {
        String character = matcher.group(1);
        String countStr = matcher.group(2);
        int count = countStr == null ? 1 : Integer.parseInt(countStr);
        sb.append(character.repeat(count));
    }
    return sb.toString();
}

测试验证

两个方案都可以正常处理你的示例输入:

  • 输入hel2o → 输出hello
  • 方案2额外支持多位计数:输入a10b3c2 → 输出aaaaaaaaaabbbcc

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:18:03