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

在我使用的程序中

line.replaceAll("(", "_"); 

我遇到了一个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.(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) 

有什么缘故吗? 我们怎样才能避免呢?

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

 line.replaceAll("\\(", "_"); 

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

 line.replace('(', '_'); 

堆栈跟踪上方的错误消息(有点)有用:

线程“main”中的exceptionjava.util.regex.PatternSyntaxException:索引1附近的未闭合组(^

(这就是我在Java 6中得到的。)它提到了“正则表达式”,“组”和括号。 如果您看不到此消息,则应检查记录/捕获/显示exception的方式。 它可以为你节省一些麻烦。