2014-01-12 1 views
1

내가 뭔가에 ":"의 문자열을 대체 할 수없는 것, 여기에 내 코드입니다가 왜 대체 할 수 없습니다 ":"

Exception in thread "Listen" java.util.regex.PatternSyntaxException: Unmatched closing ')' 
near index 0 
:) 
^ 

어떻게해야합니까?

+0

http://stackoverflow.com/questions/9279893/how-to-replace-brackets-in-strings –

답변

8

replaceAll(); 리터럴 문자열을 교체 할 때 replace() 사용 )가 특별한 의미, 따라서 오류가있는 regular expressions

message.replace(":)", replacement) 

replaceAll() 거래를.

+1

+1 내가 ppl 할 때 espcially 그들이 틀렸을 때 의견없이 downvoting 할 때 싫어! – giorashc

+1

왜 누군가가 이것을 downvote 것입니까? –

+0

덕분에,이 일했습니다! – FFlaser

1

쓰기 :

message.replaceAll(Pattern.quote(":)"), replacement); 

String#replaceAll이 정규식이 아닌 일반 문자열을 받아들입니다. )quote을 사용하면 정규식이 아닌 :) 문자열로 :)을 처리하게되므로 정규식에서 특별한 의미가 있습니다. 당신이 Pattern#quote를 사용하지 않을 경우

, 당신은 \\으로 )을 탈출해야한다. 정규식 이스케이프는 \에 의해 수행되지만 Java에서는 \\\으로 작성됩니다.

위에서 언급 한 것이 마음에 들지 않는다면 String#replace을 사용하면 정규식을 허용하지 않으므로 괜찮습니다.

+1

@arshajii 고정. 감사. – Maroun

+0

하나님 .... 실수를 고칠 기회를 누군가에게주십시오 ................ – Maroun

+2

@DoorknobofSnow '#'을 사용하는 것은 클래스 이름과 메소드/속성/속성 (일반적으로 문서)을 참조 할 때 속성 이름. – ajp15243

2

당신은 regexen에 )을 탈출해야합니다

message = message.replaceAll(":\\)", replacement); 

방금 ​​리터럴 )를 원하는 정규식을 "에게"할 수 있도록 )는 특별한 의미 (캡처 그룹)을 가지고 있기 때문이다.

관련 문제