我有一个关于使用 replaceAll() 函数的问题。
如果字符串有成对的括号,则将其替换为“”,
while(S.contains("()"))
{
S = S.replaceAll("\\(\\)", "");
}
但为什么replaceAll("\\(\\)", "");
需要使用\\(\\)
?
这是因为replaceAll
期望一个正则表达式(
并且)
在正则表达式中具有特殊含义并且需要被转义。
另一种方法是使用replace
,它与直觉相反,replaceAll
但将字符串作为输入而不是正则表达式:
S = S.replace("()", "");
首先,您的代码可以替换为:
S = S.replace("()", "");
没有while
循环。
其次,第一个参数.replaceAll()
是正则表达式,括号是正则表达式中的特殊标记(它们是分组运算符)。
而且,.replaceAll()
替换所有出现,所以你甚至不需要while
这里的循环。从 Java 6 开始,您还可以编写:
S = S.replaceAll("\\Q()\\E", "");
让读者练习一下什么\Q
和\E
是什么:http ://regularexpressions.info给出了答案;)
S = S.replaceAll("\(\)", "") = 参数是正则表达式。
因为方法的第一个参数是一个正则表达式,并且()
是正则表达式中的特殊字符,所以需要对它们进行转义。
因为括号是正则表达式中的特殊字符,所以你需要对它们进行转义。要\
在 Java 中获取字符串中的文字,您需要像这样转义它:\\
。
所以()
=> \(\)
=>\\(\\)