0

我有一个关于使用 replaceAll() 函数的问题。

如果字符串有成对的括号,则将其替换为“”,

while(S.contains("()"))
        {
            S = S.replaceAll("\\(\\)", "");
        }

但为什么replaceAll("\\(\\)", "");需要使用\\(\\)

4

6 回答 6

2

因为正如javadocs所指出的,参数是正则表达式

正则表达式中的括号用于分组。如果要将括号作为正则表达式的一部分进行匹配,则必须对其进行转义。

于 2013-01-13T19:15:44.630 回答
1

这是因为replaceAll期望一个正则表达式(并且)在正则表达式中具有特殊含义并且需要被转义。

另一种方法是使用replace,它与直觉相反,replaceAll但将字符串作为输入而不是正则表达式:

S = S.replace("()", "");
于 2013-01-13T19:15:58.267 回答
1

首先,您的代码可以替换为:

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

没有while循环。

其次,第一个参数.replaceAll()是正则表达式,括号是正则表达式中的特殊标记(它们是分组运算符)。

而且,.replaceAll()替换所有出现,所以你甚至不需要while这里的循环。从 Java 6 开始,您还可以编写:

S = S.replaceAll("\\Q()\\E", "");

让读者练习一下什么\Q\E是什么:http ://regularexpressions.info给出了答案;)

于 2013-01-13T19:16:19.437 回答
1

S = S.replaceAll("\(\)", "") = 参数是正则表达式。

于 2014-09-24T01:03:47.250 回答
0

因为方法的第一个参数是一个正则表达式,并且()是正则表达式中的特殊字符,所以需要对它们进行转义。

于 2013-01-13T19:16:24.863 回答
0

因为括号是正则表达式中的特殊字符,所以你需要对它们进行转义。要\在 Java 中获取字符串中的文字,您需要像这样转义它:\\

所以()=> \(\)=>\\(\\)

于 2013-01-13T19:16:29.277 回答