2010-01-09 2 views
20

В моей программе, когда я используюСтрока поиска по шаблону проблема в Java

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) 

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

ответ

37

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

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

В качестве альтернативы, так как вы заменяете один символ, вы могли бы использовать string.replace так:

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

Благодарим за редактирование Laurence! D'о! –

+5

'String.replace' также может использоваться для замены буквального (не регулярного выражения). – McDowell

+0

Спасибо - добавлен ответ. –

2

сообщение об ошибке выше трассировки стека (несколько) полезно:

Исключение в потоке «главный» java.util.regex.PatternSyntaxException: ПКООН osed группа вблизи индекса 1 ( ^

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

+0

+1 для обучения рыбной ловле. – trashgod

Смежные вопросы