Java中的字符串模式匹配问题

Mah*_*pta 20 java regex

在我使用的程序中

line.replaceAll("(", "_");
Run Code Online (Sandbox Code Playgroud)

我有一个RuntimeException:

 at java.util.regex.Pattern.error(Unknown Source)
 at java.util.regex.Pattern.accept(Unknown Source)
 at java.util.regex.Pattern.group0(Unknown Source)
 at java.util.regex.Pattern.sequence(Unknown Source)
 at java.util.regex.Pattern.expr(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 Processing.processEarly(Processing.java:95)
 at Processing.main(Processing.java:34)
Run Code Online (Sandbox Code Playgroud)

有什么缘故吗?我们怎能避免它?

Dav*_*d M 37

第一个参数string.replaceAll是正则表达式,而不仅仅是一个字符串.左开括号是正则表达式中的特殊字符,因此您必须将其转义:

line.replaceAll("\\(", "_");
Run Code Online (Sandbox Code Playgroud)

或者,因为您要替换单个字符,string.replace所以您可以这样使用:

line.replace('(', '_');
Run Code Online (Sandbox Code Playgroud)

  • `String.replace`也可用于文字(非正则表达式)替换. (5认同)