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

如何在Java中移除字符串中的所有"()"序列?

解决移除字符串中"()"序列的无限循环问题

你的代码陷入无限循环的核心原因是:replaceAll()方法的第一个参数是正则表达式,而()在正则语法里代表「捕获组」,它匹配的是空字符串。这导致每次调用s.replaceAll("()", "")根本不会修改原字符串,s.contains("()")永远为true,循环停不下来。

两种可行的修复方案:

  • 方案一:用replace()替代replaceAll()
    replace()是普通字符串匹配替换,不会把参数解析成正则,直接匹配字面量的"()":

    public static String removeParentheses(String s) {
        while (s.contains("()")) {
            s = s.replace("()", "");
        }
        return s;
    }
    

    这个方法能正确处理你的示例输入,把"() a)"转换成" a)",同时也能处理替换后新生成的"()"(比如输入"(())"会被逐步替换成空字符串)。

  • 方案二:转义正则中的特殊字符
    如果一定要用replaceAll(),需要把()转义成正则里的字面量,Java中要写双反斜杠\\(\\):

    public static String removeParentheses(String s) {
        while (s.contains("()")) {
            s = s.replaceAll("\\(\\)", "");
        }
        return s;
    }
    

额外优化:

如果你的场景中不会出现「替换后新生成()」的情况(比如只有独立的(),没有嵌套或连续生成的情况),可以直接去掉循环,一次替换就能完成:

public static String removeParentheses(String s) {
    return s.replace("()", "");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 16:55:25