썩구노트

자바에서 replaceAll 쓸 때, 특수문자 치환법 본문

JAVA

자바에서 replaceAll 쓸 때, 특수문자 치환법

양석규 2016. 11. 19. 23:02

출처 : http://mean79.tistory.com/60 <- 여기 가서 보면 설명 잘 되어 있다.


전에 String.replaceAll() 쓰는데, 계속 에러나길레 둘려쳐서 구현한 적이 있는데, 이것 때문이었구만.

자바는 String 의 replace 함수의 역사( ? ) 때문에, String.replaceAll( ) 은  String.replace( ) 과 달리 인자값으로 "정규식" 을 받는다. 
즉, String.replaceAll( 변경전문자, 변경후문자 ) 으로 사용할 때에, "변경전문자" 가 단순히 문자열이 아니라, 정규식이라는 것.

물론 나같은 사람은 그딴거 없고 그냥 문자열 치환하는데만 썼는데.... 그러다보니 가끔식 뻑 나더란 것.
알고보니까 저 "정규식" 처리때문에, 정규식에서 쓰이는 특수문자들은 치환 문자열로 넣으면 에러가 나는 것이렸다....

예를 들면 


String.replaceAll( "가나", "거너" ) 


는 문제없는데, 


String.replaceAll( "가*나", "거-너" ) 


는 뻑난다는 거다.

아래의 내용은 http://mean79.tistory.com/60 에서 퍼옴. 문자열에 따라 대응해 주면 되겠다. 
예를 들어 String.replaceAll( "가*나", "거-너" )  라면, 


String.replaceAll( "가*나", "거-너" )  -> String.replaceAll( "가[*]나", "거-너" ) 



뭐 이런식으로 써주면 됨. ( 아래부터는 퍼온것. )


-------------------------------------

1. []으로 싸주면 문자자체로 인식하는 것들. 

*  ⇒ [*] 
+  ⇒ [+] 
$  ⇒ [$] 
|  ⇒ [|]
! # % & @ ` : ; - . < > , ~ ' 


2. \\를 붙여줘야 하는 것들. 

( ⇒ \\( 
) ⇒ \\) 
{ ⇒ \\{ 
} ⇒ \\} 
^ ⇒ \\^ 
[ ⇒ \\[ 
] ⇒ \\] 


3. 자바의 특수문자는 \을 쓴다. 

 " ⇒ \" 


등등등