Java正则字符串替换问题:replaceAll未生效及括号替换需求
哈哈,这个问题我之前也踩过坑!核心原因就是Java里String的不可变性——你调用replaceAll()之后没把返回的新字符串存回去,原字符串当然纹丝不动啦!
问题分析
先看你写的代码:
String test = "(1,1)(2,2)"; test.replaceAll(Pattern.quote(")("), Pattern.quote(" "));
Java的String对象一旦创建就无法被修改,所有看似“修改”字符串的方法(比如replaceAll、substring)都会返回一个全新的String实例,而原字符串完全不受影响。你上面的代码只是调用了方法,但没有把返回的新字符串赋值给test变量,所以test还是原来的"(1,1)(2,2)"。
正确的解决步骤
我们分两步来实现你的需求:
1. 替换")("为空格
先修正第一步,把replaceAll的返回值重新赋值给test:
String test = "(1,1)(2,2)"; // 替换")("为空格,注意接收返回的新字符串 test = test.replaceAll(Pattern.quote(")("), " "); // 此时test的值为:"(1,1 2,2)"
这里补充个小细节:第二个参数不用Pattern.quote(" "),因为空格在正则表达式里没有特殊含义,直接写" "就足够啦。
2. 删除所有"("和")"
接下来用正则表达式匹配所有括号,替换为空字符串:
test = test.replaceAll("[()]", ""); // 此时test的值为:"1,1 2,2"
这里的[()]是正则里的字符类,意思是匹配(或者)中的任意一个字符。
合并成一行(简化写法)
如果想让代码更紧凑,可以把两步合并成链式调用:
String test = "(1,1)(2,2)"; test = test.replaceAll(Pattern.quote(")("), " ").replaceAll("[()]", "");
这样就能得到你想要的结果啦!
内容的提问来源于stack exchange,提问作者Adrien Varet
相关产品推荐
相关产品推荐

