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

时间:2010-01-09 11:19:38

标签: java regex

在我正在使用的程序中

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.<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)

有什么理由吗?我们怎样才能避免呢?

2 个答案:

答案 0 :(得分:37)

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

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

或者,由于您要替换单个字符,因此可以使用string.replace,如下所示:

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

答案 1 :(得分:2)

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

  

线程“main”中的异常   java.util.regex.PatternSyntaxException:   索引1附近的未封闭组       (        ^

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