如何优化Java中简易字符串解密方法的多层循环实现
优化方案
原有代码可优化点
- 多余的空格分割逻辑:如果你的输入本身是单个加密字符串,按
\s+分割完全无必要,平白多了一层循环- 多层嵌套循环可读性差,且默认只能处理1位数字的计数,无法支持连续重复超过9次的场景(比如
a12会被错误解析为a重复1次、再重复2次,最终得到aaa而非预期的12个a)- 缺少边界校验:如果字符串第一个字符就是数字,会出现数组越界问题
方案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
相关产品推荐
相关产品推荐

