2010-01-09 28 views
20

Trong chương trình của tôi khi tôi đang sử dụngChuỗi mô hình phù hợp với vấn đề trong Java

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

tôi nhận được một 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) 

Có lý do nào đó? Làm thế nào chúng ta có thể tránh nó?

Trả lời

37

Đối số đầu tiên cho string.replaceAll là cụm từ thông dụng, không chỉ là một chuỗi. Khung mở lại là một nhân vật đặc biệt trong một regex, vì vậy bạn phải thoát khỏi nó:

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

Ngoài ra, kể từ khi bạn đang thay thế một nhân vật duy nhất, bạn có thể sử dụng string.replace như vậy:

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

Cảm ơn Laurence đã chỉnh sửa! D'oh! –

+5

'String.replace' cũng có thể được sử dụng cho thay thế chữ (không phải regex). – McDowell

+0

Cảm ơn - đã thêm vào câu trả lời. –

2

Các thông báo lỗi trên stack trace là (hơi) hữu ích:

Exception in thread "main" java.util.regex.PatternSyntaxException: Uncl nhóm osed gần index 1 ( ^

(Đó là những gì tôi nhận được trong Java 6.) Nó đề cập đến "regex", "nhóm", và dấu ngoặc đơn. Nếu bạn không thể thấy thông báo này, bạn nên kiểm tra xem bạn đang đăng nhập/bắt/hiển thị ngoại lệ như thế nào. Nó có thể giúp bạn tiết kiệm một số rắc rối trong tương lai.

+0

+1 để dạy cách câu cá. – trashgod

Các vấn đề liên quan