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

如何替换所有匹配子串并将String对象括号内文本转为大写

核心实现思路

不用提前统计括号匹配的数量,主流编程语言的正则API都支持动态替换能力:每次匹配到括号包裹的片段时,自定义处理逻辑将括号内的内容转为大写,再替换掉原括号+内容的片段即可。

匹配使用的正则规则为 \((.*?)\):

  • \( 匹配左括号本身
  • (.*?) 为非贪婪捕获组,捕获左括号后到下一个右括号前的所有内容,避免多括号场景下跨括号匹配
  • \) 匹配右括号本身
Java 实现代码

你提到了StringUtils,默认按Java环境给出实现:

Java 9+ 版本(支持lambda替换)

import java.util.regex.Pattern;

public class BracketContentUpper {
    // 预编译正则,多次调用时不需要重复编译,提升性能
    private static final Pattern BRACKET_PATTERN = Pattern.compile("\\((.*?)\\)");

    public static String convert(String input) {
        return BRACKET_PATTERN.matcher(input)
                // 每次匹配后取括号内的内容转大写,替换原片段
                .replaceAll(match -> match.group(1).toUpperCase());
    }

    public static void main(String[] args) {
        String testInput = "Hi (abc), how (a)re (You)?";
        System.out.println(convert(testInput));
        // 输出结果:Hi ABC, how Are YOU?
    }
}

Java 8 及更低版本实现

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

public class BracketContentUpper {
    private static final Pattern BRACKET_PATTERN = Pattern.compile("\\((.*?)\\)");

    public static String convert(String input) {
        Matcher matcher = BRACKET_PATTERN.matcher(input);
        StringBuffer resultBuffer = new StringBuffer();
        // 循环遍历所有匹配项
        while (matcher.find()) {
            // 替换当前匹配项为括号内内容转大写的结果
            matcher.appendReplacement(resultBuffer, matcher.group(1).toUpperCase());
        }
        // 拼接最后一个匹配项之后的剩余内容
        matcher.appendTail(resultBuffer);
        return resultBuffer.toString();
    }
}
注意事项

上述实现仅适用于无嵌套括号的场景,如果输入内容存在(a(b)c)这类嵌套括号,正则无法正确匹配最内层/最外层括号内容,需要使用栈结构遍历字符单独处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:54:07