正则表达式替换Java中字符串中的所有“(“and”)”
在Java中,如何用句号替换字符串中的所有“(“and”)?我尝试了以下方法:
String url = "https://bitbucket.org/neeraj_r/url-shortner)";
url.replaceAll(")", ".");
url.replaceAll(")", ".");
但它不起作用。错误是:
Exception in thread "main" java.util.regex.PatternSyntaxException: Unmatched closing
')'
)
at java.util.regex.Pattern.error(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.util.regex.Pattern.<init>(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.lang.String.replaceAll(Unknown Source)
at com.azzist.cvConversion.server.URLChecker.main(URLChecker.java:32)
我认为这个问题在所有正则表达式中也会存在。在)
之前添加\
无效
# 1 楼答案
你需要分别用
"\\("
和"\\)"
来转义'('
和')'
:# 2 楼答案
^{} 期望
regex
作为第一个参数,而偏执在那里有特殊的意义改用^{} :
请注意
url =
部分对于保存替换结果很重要。由于String
是不可变的,所以原始的String
没有改变,而是创建了一个新的。要保留结果url
需要指向这个# 3 楼答案
)
应该用两个反斜杠转义李>所以代码如下所示:
以及输出:
# 4 楼答案
您可以一次性使用replaceAll:
说明:
[()]
匹配(
和)
,括号不需要在[]
组内转义李>编辑(正如@Keppil所指出的):
还要注意的是,字符串
url
不会被replace更改,它只会返回一个带有replace的新字符串,因此您必须执行以下操作:# 5 楼答案
添加单个
\
将不起作用,因为这将尝试将\)
作为转义特殊字符进行计算,而它不是你需要使用“\)”。第一个
\
逃逸第二个,产生一个“正常的”\
,而正常的)
又逃逸第二个)
,产生一个与结束语)
完全匹配的正则表达式通用解决方案是使用^{} ,它接受任意字符串并返回与该字符串完全匹配的正则表达式
# 6 楼答案
你也可以使用org。阿帕奇。平民朗·斯特林古提斯。替换不使用正则表达式的(String,String,String)
来自apache commons库http://commons.apache.org/