티스토리 뷰
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을 찾는 정규표현식이 되는 흐름이 완성된다.
레퍼런스
'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
링크
TAG
- 루나빔
- RequestBody
- 레디스
- RequestPart
- ModelAttribute
- vim
- 아키텍처
- neovim
- RequestParam
- JavaScript
- lunarvim
- Dap
- IDE
- 도커
- 배포
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함