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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:34:44