用Java替换字符串中的所有“(”和“)”

时间:2012-09-12 08:10:08

标签: java regex string replaceall

如何用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)

我认为这个问题也存在于所有正则表达式中。在\之前添加)无效。

9 个答案:

答案 0 :(得分:17)

您可以一次性使用replaceAll:

url.replaceAll("[()]", ".")

说明:

  • [()]()匹配,括号不需要在[]组内进行转义。
编辑(正如@Keppil指出的那样):

另请注意,字符串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)

  1. 字符串是不可变的。
  2. 应该使用2个反斜杠转义
  3. )
  4. 所以代码看起来像这样:

    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("\\(", ".");;