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

字符串连续重复字符替换为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:30:23