如何用Java中的fullstop替换字符串中的所有“(”和“)”?我尝试了以下方式:
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)
我认为这个问题也存在于所有正则表达式中。在\
之前添加)
无效。
答案 0 :(得分:17)
您可以一次性使用replaceAll:
url.replaceAll("[()]", ".")
说明:
[()]
与(
和)
匹配,括号不需要在[]
组内进行转义。另请注意,字符串url
不会被替换更改,它只返回带有替换的新String,因此您必须这样做:
url = url.replaceAll("[()]", ".");
答案 1 :(得分:12)
您需要分别使用'('
和')'
转义"\\("
和"\\)"
:
url = url.replaceAll("\\)", ".");
url = url.replaceAll("\\(", ".")
答案 2 :(得分:7)
replaceAll()
期望regex
作为第一个参数,而parantheses在那里具有特殊含义。
改为使用replace()
:
String url = "https://bitbucket.org/neeraj_r/url-shortner)";
url = url.replace("(", ".").replace(")", ".");
请注意,url =
部分对于保存替换结果非常重要。由于String
是不可变的,原始的String
不会更改,但会创建一个新的url
。要保持结果{{1}}需要指向此结果。
答案 3 :(得分:2)
)
。所以代码看起来像这样:
String url = "https://bitbucket.org/neeraj_r/url-shortner)";
// is you need to escape all of them, use "[()]" pattern, instead of "\\)"
String s = url.replaceAll("\\)", ".");
System.out.println(url);
System.out.println(s);
输出:
https://bitbucket.org/neeraj_r/url-shortner)
https://bitbucket.org/neeraj_r/url-shortner.
答案 4 :(得分:1)
添加单个\
将无效,因为这会尝试将\)
评估为转义的特殊字符,而不是。{/ p>
你需要使用“\”“。第一个\
转义第二个\
,产生一个“正常”)
,它反过来转义)
,产生一个完全匹配一个关闭的副词{{1}}的正则表达式。
通用解决方案是使用Pattern.quote
,它接受一个任意字符串并返回一个与该字符串完全匹配的正则表达式。
答案 5 :(得分:1)
你也可以使用不使用正则表达式的org.apache.commons.lang.StringUtils.replace(String,String,String)
来自apache commons library http://commons.apache.org/
答案 6 :(得分:0)
方法String#replaceAll
需要正则表达式,(
以及)
是特殊字符(标记组),因此您需要将它们转义为非特殊{{1} }。
此外,您可以使用模式url.replaceAll("\\)", ".");
一次替换两个字符。您可以看到,在此上下文中,括号不会被转义。这是因为regEx上下文 - 在url.replaceAll("[()]", ".");
内部,它们没有任何特殊含义。
请查看JavaDoc以获取更多信息。
答案 7 :(得分:0)
因为)
是正则表达式的特征,所以你需要转义它。试试这个:
url.replaceAll("\)", "\.");
答案 8 :(得分:0)
使用
url.replaceAll("\\)", ".").replaceAll("\\(", ".");;