Представьте проблему сопоставления с образцом в виде строки в Java

В моей программе, когда я использую

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)

Есть ли какая-либо причина? Как мы можем избежать его?

20
задан Alan Moore 8 February 2010 в 06:39
поделиться

2 ответа

[

] Первый аргумент к []string.replaceAll[] - регулярное выражение, а не просто строка. Открывающаяся левая скобка - это специальный символ в регексе, поэтому вы должны избежать его:[

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

]Альтернативно, так как вы заменяете один символ, вы можете использовать []string.replace[] так:[

] [
line.replace('(', '_');
]
37
ответ дан 29 November 2019 в 23:57
поделиться
[

] Сообщение об ошибке над трассой стека является (в некоторой степени) полезным:[

] [
] [

]Исключение в потоке "main". java.util.regex.PatternSyntaxException: Незакрытая группа около индекса 1 ( ^[

] [
] [

](Вот что я получаю на Java 6.) Здесь упоминаются "регекс", "группа" и скобки. Если вы не видите этого сообщения, то проверьте, как вы регистрируете/испрашиваете/показываете исключения. Это может избавить вас от неприятностей в будущем[

].
2
ответ дан 29 November 2019 в 23:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: