본문 바로가기
Dev Note/JAVA

[JAVA] replace()와 replaceAll()의 차이_정규표현식 vs 문자열

by iyos 2020. 9. 10.

 


본 포스팅 내용은 제가 이해한 방식으로 구현 및 작성하였습니다. 

더 좋은 방식이 있다면 피드백 주시면 정말 감사하겠습니다!🙏🏻

 


 

<시행착오😅>

데이터베이스에 /r/n로 표현되어있는 엔터를 <br>로 바꿔 표현하던 중 문제가 생겼다..

컨트롤러에 작성한 java코드는 아래와 같다.

 

 

1. replaceAll("\\r\\n", "<br>") 사용 -> 오류

survey.setSurveyIntro(survey.getSurveyIntro().replaceAll("\\r\\n", "<br>"));

 

replaceAll을 사용하여 다시 setter로 넣어줬는데도 바뀌지 않는 것이다.

replaceAll함수 사용이나 set과 get사용에 문제가 있나?

 


2. replaceAll("수고", "소이") 사용 -> 정상작동

survey.setSurveyIntro(survey.getSurveyIntro().replaceAll("수고", "소이"));

테스트로 '수고'를 '소이'로 바꿔보았더니 아주 잘만 작동한다!ㅋㅋㅋㅋ

그렇다면 개행문자를 변환하는 것이 문제가 있는 것으로 판단!

비슷해 보이는 replace함수를 사용해보았다.

 


 

3.replace("\\r\\n", "<br>") 사용 -> 정상작동

survey.setSurveyIntro(survey.getSurveyIntro().replace("\\r\\n", "<br>"));

정상작동!!!!

그렇다면 개행문자를 치환 할 때

replace는 내가 입력한 문자열 그대로를 치환해주고 replaceAll은 그렇지 않다는 것을 어렴풋이 알게되었다.

이제 실제로 어떤 차이가 있는지 정확히 알아보자.

 


<replace와 replaceAll의 차이😎>

 

 

- java.lang.String 패키지의 replace 메소드, replaceAll 메소드

https://docs.oracle.com/javase/8/docs/api/

 

공통점은 함수는 대상 문자열을 원하는 문자값으로 변환하는 함수이다.

첫번째 매개변수 변환하고자 하는 대상이 될 문자열, 두번째 매개변수 변환할 문자 값 이다.

 

반면 차이점은 매개변수의 형태를 보면 CharSequence String 가 다르다는 차이점을 볼 수 있다.

또한 replaceAll은 regular expression, 즉 '정규표현식' 이라고 아주 정확히 나와있다!

 


 

<결론>

replaceAll()은 정규표현식 포함 시 사용!

replace()은 문자열치환 용으로만 사용!

 

 


 

 

 

정규표현식의 정확한 의미와 용도, 종류에 대해서는 다음포스팅에서 알아보자!

반응형