如何在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
相关产品推荐
相关产品推荐

