字符串连续重复字符替换为Double+大写字符的函数异常排查
解决连续重复小写字母替换为"Double+大写字符"的问题
你这段代码的问题出在替换字符串的处理上——"Double" + "$1".toUpperCase()里的"$1"是普通字符串字面量,调用toUpperCase()只会把"$1"原样保留(本身没有小写字母可转换),根本不会把正则匹配到的分组字符转成大写。所以替换后还是原来的小写字符,和预期结果不符。
修正方案
Java的String.replaceAll()没法直接在替换字符串里对分组内容做大小写转换,得用Matcher类的动态替换功能,手动处理每个匹配项:
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { System.out.println(stringTransform("hello")); System.out.println(stringTransform("bookkeeper")); } public static String stringTransform(String str) { Pattern pattern = Pattern.compile("([a-z])\\1"); Matcher matcher = pattern.matcher(str); StringBuilder sb = new StringBuilder(); while (matcher.find()) { // 取出匹配到的分组字符,转大写后拼接"Double"完成替换 matcher.appendReplacement(sb, "Double" + matcher.group(1).toUpperCase()); } // 把剩余未匹配的字符串追加到结果末尾 matcher.appendTail(sb); return sb.toString(); } }
运行结果
执行后会输出预期的结果:
heDoubleLo bDoubleODoubleKDoubleEper
内容的提问来源于stack exchange,提问作者Evgopka
相关产品推荐
相关产品推荐

