반응형
replaceAll, replaceFirst 에서 특수문자 인식하기
개발 도중 url 의 가장 첫 .
앞에 특정한 문자를 추가해야하는 상황이 생겼다.
@Test
void javaReplaceDotTest() throws Exception {
String url = "aaa.bbb.ccc.ddd";
String replaceUrl = url.replaceFirst(".", "gg");
Assertions.assertThat(replaceUrl).isEqualTo("aaaggbbb.ccc.ddd");
}
위와 같이 내가 의도한 상황은 aaaggbbb.ccc.ddd
이지만
위와 같은 결과가 나타났다.
이는 replace와 replaceAll, replaceFirst의 매개변수 차이로 인해 나타나는 현상이다.
replace는 char 또는 CharSequence를 인자로 받지만, replaceFirst와 replaceAll은 정규표현식
형태로 인자를 받는다.
regex에서 .
은 어떤 문자 하나를 뜻하기 때문에 위 상황에서는 첫 .
문자를 찾는 것이 아닌 url의 첫번째 문자인 a
를 gg
로 변경한 것이다.
해결방법은?
@Test
void javaReplaceDotTest2() throws Exception {
String url = "aaa.bbb.ccc.ddd";
String replaceUrl = url.replaceFirst("[.]", "gg");
System.out.println("replaceUrl = " + replaceUrl);
Assertions.assertThat(replaceUrl).isEqualTo("aaaggbbb.ccc.ddd");
}
나의 경우 이러한 정규표현식에 특수문자를 입력해야 하는 상황에 []
으로 해당 특수문자를 감싸는 형태로 해결한다.
[]으로 해당 특수문자를 감싸게 된다면 java 내에서 해당 문자를 일반 문자로 취급하여 의도한 대로 replaceAll, replaceFirst를 수행하게 된다.
반응형
'Java & Kotlin > Java' 카테고리의 다른 글
백엔드 서비스 운영시 고려해야할 점 (0) | 2024.01.21 |
---|---|
스프링부트 커넥션 설정도 체크하자 (1) | 2024.01.21 |
[Java] 크롤링 crawling, 셀레니움 Selenium (0) | 2021.02.22 |
20.11.09 - 배열 예제 (0) | 2021.01.19 |
20.11.04 - 반복문 예제 (0) | 2021.01.19 |
20.11.03 - 연산자 예제 (0) | 2021.01.19 |