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

Java中的字符串模式匹配问题,java,regex,Java,Regex,在我的程序中,当我使用 line.replaceAll("(", "_"); 我得到一个运行时异常: 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 S

在我的程序中,当我使用

line.replaceAll("(", "_");
我得到一个运行时异常:

 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)
java.util.regex.Pattern.error处的
(未知源)
位于java.util.regex.Pattern.accept(未知源)
位于java.util.regex.Pattern.group0(未知源)
位于java.util.regex.Pattern.sequence(未知源)
位于java.util.regex.Pattern.expr(未知源)
位于java.util.regex.Pattern.compile(未知源代码)
位于java.util.regex.Pattern。(未知源)
位于java.util.regex.Pattern.compile(未知源代码)
位于java.lang.String.replaceAll(未知源)
processEarly(Processing.java:95)
at Processing.main(Processing.java:34)

有什么原因吗?如何避免它?

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

line.replaceAll("\\(", "_");
或者,由于要替换单个字符,因此可以使用
string.replace
如下所示:

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

堆栈跟踪上方的错误消息(有些)有帮助:

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


(这是我在Java 6中得到的。)它提到了“regex”、“group”和括号。如果你看不到这条消息,你应该检查你是如何记录/捕获/显示异常的。这可以在将来为你省去一些麻烦。

String.replace
也可以用于文本(非regex)替换。