7

如何在Java中用句号替换字符串中的所有“(”和“)”?我尝试了以下方式:

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)

我认为这个问题也会出现在所有正则表达式中。\之前添加)没有用。

4

9 回答 9

17

您可以一次性使用 replaceAll:

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

解释:

  • [()]匹配(and ),括号不需要在[]组内转义。

编辑(正如@Keppil 指出的那样):

另请注意,url替换不会更改字符串,它仅返回带有替换的新字符串,因此您必须这样做:

url = url.replaceAll("[()]", ".");
于 2012-09-12T08:13:46.033 回答
14

您需要分别转义'('')'使用"\\(""\\)"

url = url.replaceAll("\\)", ".");  
url = url.replaceAll("\\(", ".")
于 2012-09-12T08:12:06.330 回答
8

replaceAll()期望 aregex作为第一个参数,并且括号在那里具有特殊含义。

改用replace()

String url = "https://bitbucket.org/neeraj_r/url-shortner)";
url = url.replace("(", ".").replace(")", ".");

请注意,该url =零件对于保存替换结果很重要。由于Strings 是不可变的,所以原始String的没有改变,而是创建了一个新的。为了保持结果url需要指向这个。

于 2012-09-12T08:12:41.793 回答
2
  1. 字符串是不可变的。
  2. )应该用 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.
于 2012-09-12T08:17:18.530 回答
1

添加单个\将不起作用,因为这将尝试评估\)为不是的转义特殊字符。

您需要使用“\)”。第一个\转义第二个,产生一个“正常” \,而后者又转义),产生一个与右括号完全匹配的正则表达式)

通用解决方案是使用Pattern.quote,它接受任意字符串并返回与该字符串完全匹配的正则表达式。

于 2012-09-12T08:13:03.180 回答
1

您也可以使用不使用正则表达式的 org.apache.commons.lang.StringUtils.replace(String, String, String)

来自 apache 公共库http://commons.apache.org/

于 2012-09-12T10:23:01.273 回答
0

MethodString#replaceAll需要正则表达式(以及)特殊字符(标记组),因此您需要将它们转义为 non-special url.replaceAll("\\)", ".");

您也可以用 pattern 一次替换这两个字符url.replaceAll("[()]", ".");。您可以看到,在这种情况下,括号没有被转义。那是因为正则表达式上下文 - 在[]它们内部没有任何特殊含义。

查看JavaDoc了解更多信息。

于 2012-09-12T08:13:46.440 回答
0

因为)是正则表达式的字符,所以你需要转义它。试试这个:

url.replaceAll("\)", "\.");
于 2012-09-12T08:13:48.220 回答
0

采用

url.replaceAll("\\)", ".").replaceAll("\\(", ".");;
于 2012-09-12T08:14:11.543 回答