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

2022-09-02 09:21:54

在我的程序中,当我使用

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)

有什么原因吗?我们怎样才能避免它?


答案 1

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

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

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

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

答案 2

堆栈跟踪上方的错误消息(在某种程度上)很有帮助:

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

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