1

我有一个字符串,我想去掉括号

这是我的字符串"(name)" ,我想得到"name"

相同的东西没有括号

我有String s = "(name)";

我写

s = s.replaceAll("(","");
s = s.replaceAll(")","");

我得到了一个例外

Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed group near index 1
(

我如何摆脱括号?

4

6 回答 6

8

括号字符(并在正则表达式中分隔捕获组)的边界,该正则表达式用作. 字符需要转义。replaceAll

s = s.replaceAll("\\(","");
s = s.replaceAll("\\)","");

更好的是,您可以简单地将括号放在字符类中,以防止字符被解释为元字符

s = s.replaceAll("[()]","");
于 2013-08-31T20:18:10.043 回答
4

s = s.replace("(", "").replace(")", "");

这里不需要正则表达式。

如果您想使用正则表达式(不知道为什么会这样),您可以执行以下操作:

s = s.replaceAll("\\(", "").replaceAll("\\)", "");

问题在于(and)是元字符,因此您需要对它们进行转义(假设您希望将它们解释为它们的显示方式)。

于 2013-08-31T20:17:47.033 回答
3

String#replaceAll将正则表达式作为参数。您正在使用Grouping Meta-characters正则表达式参数。这就是为什么会出错。

元字符用于对模式进行分组、划分和执行特殊操作。

\ 转义下一个元字符(它变成一个普通/文字字符)
^ 匹配行首
. 匹配任何字符(换行符除外)
$ 匹配行尾(或在换行符之前)
| 交替(“或”语句)
() 分组
[] 自定义字符类

所以使用
1.\\(而不是(
2.\\)而不是 )

于 2013-08-31T20:19:25.707 回答
2

您需要像这样转义括号:

s = s.replaceAll("\\(","");
s = s.replaceAll("\\)","");

您需要两个斜杠,因为正则表达式处理引擎需要看到 a\(才能将括号作为文字括号(而不是正则表达式的一部分)处理,并且您需要转义反斜杠以便正则表达式引擎能够将其视为反斜杠。

于 2013-08-31T20:21:38.993 回答
1

您需要转义 ( 和 ) 它们具有特殊的字符串字面意义。像这样做:

s = s.replaceAll("\\(","");
s = s.replaceAll("\\)","");
于 2013-08-31T20:20:30.350 回答
1
s=s.replace("(","").replace(")","");
于 2013-09-01T01:23:50.810 回答