티스토리 뷰

CS/Java

String replaceAll에서 \r\n을 입력하는 방법

기억용블로그 2022. 12. 7. 13:33
728x90

상황

자바에는 String에 replaceAll 메서드가 존재한다.
이 메서드에서 \r\n을 찾는 표현식을 작성하고자 하면 다음과 같은 형식으로 코드를 작성해야 한다.

rawText.replaceAll("(\\\\r\\\\n|\\\\n)", "\\\\n");

결과적으로 하나의 \를 입력하기 위해서 총 4개의 백슬래쉬(\\\\)를 입력해야 하는 상황이 발생한다.

이유

이러한 식으로 작성해야 되는 이유는 다음과 같다.

  • Java에서 \를 인식하기 위해서 \\가 필요함.
  • replaceAll에 들어가는 첫 번째 parameter가 regexp이므로 여기서도 \를 입력하기 위해 \\가 필요하다.

위 2가지 조건이 중첩되어 Java에서 \를 인식하게 하기 위해 \\를 입력한 후에야 \를 \로 인식.
이때 만약 \\r만 입력하였다면 정규표현식에서는 이를 \r로 인식하게 되고 이때의 \는 Escape Character로 동작하여 \r (carriage return)을 찾는 정규표현식으로 원하는 결과와는 다른 식으로 동작하게 된다.

\\\\r과 같이 제대로 입력하였다면 Java에서 \\가 Escape Character로 동작하여 \로 변환되고 이후에 정규표현식으로 넘어간 \\r의 \\가 Escape Character로 동작하여 \가 되고 결과적으로 \r을 찾는 정규표현식이 되는 흐름이 완성된다.

레퍼런스

replaceAll에서 4개의 \가 필요한 이유

'CS > Java' 카테고리의 다른 글

비트 연산자 유즈 케이스 모음  (0) 2022.11.10
자바의 OOP  (0) 2022.10.25
JSON을 파싱하는 방법  (0) 2022.10.21
자바에서 동시성 문제를 해결하는 방법  (0) 2022.09.17
자바의 <<, >>, >>>와 그의 활용  (0) 2022.09.06
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함