我有一个关于使用 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 中获取字符串中的文字,您需要像这样转义它:\\。
所以()=> \(\)=>\\(\\)