В моей программе, когда я использую
line.replaceAll("(", "_");
Я получил a 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)
Есть ли какая-либо причина? Как мы можем избежать его?
] Первый аргумент к []string.replaceAll[
] - регулярное выражение, а не просто строка. Открывающаяся левая скобка - это специальный символ в регексе, поэтому вы должны избежать его:[
line.replaceAll("\\(", "_");
]
[]Альтернативно, так как вы заменяете один символ, вы можете использовать []string.replace[
] так:[
line.replace('(', '_');
] ] Сообщение об ошибке над трассой стека является (в некоторой степени) полезным:[
] [] [] []Исключение в потоке "main". java.util.regex.PatternSyntaxException: Незакрытая группа около индекса 1 ( ^[
] [
](Вот что я получаю на Java 6.) Здесь упоминаются "регекс", "группа" и скобки. Если вы не видите этого сообщения, то проверьте, как вы регистрируете/испрашиваете/показываете исключения. Это может избавить вас от неприятностей в будущем[
].