Language/Java
replace vs replaceAll
Anoi
2023. 1. 18. 23:25
replace(찾을문자열, 바꿀문자열)
주어진 문자열에서 바꾸고 싶은 특정 문자열이 있을 때 사용하는 함수이다.
1
2
3
4
|
String str = "ababab";
String result1 = str.replace("ab", "0");
//000
|
cs |
같은 문자열에 replaceAll을 적용해보겠다.
1
2
3
4
|
String str = "ababab";
String result2 = str.replaceAll("ab", "0");
//000
|
cs |
replaceAll을 사용했을 때도 replace와 같은 결과가 나왔다.
그렇다면 둘의 차이는 무엇일까?
replaceAll(정규식 또는 찾을문자열, 바꿀문자열)
만약 ab를 0으로 치환하는 게 아니라 a와 b를 각각 0으로 표현한다고 해보자.
1) replace
1
2
3
4
5
|
String str = "ababab";
String result3 = str.replace("a", "0");
result3 = result3.replace("b", "0");
//000000
|
cs |
replace는 1번에 한 문자열만 치환할 수 있기 때문에 a와 b를 각각 replace 해야 한다
바꾸고 싶은 문자가 더 많다면 더 많은 replace가 필요하다
2) replaceAll
1
2
3
4
|
String str = "ababab";
String result4 = str.replaceAll("[ab]", "0");
//000000
|
cs |
replaceAll은 replace와 달리 정규식을 사용할 수 있기 때문에 한 번에 처리할 수 있다.
바꿔야할 문자가 더 다양하다면 더욱 유용할 것이다.
이렇게 되면 replace를 쓸 일이 없지 않나 싶지만 그건 아니다.
예를 들어
String hi = "안녕하세요.";
라는 문자열이 있을 때 .을 ?로 바꿔보자.
1) replace
1
2
3
4
|
String hi = "안녕하세요.";
String result5 = hi.replace(".", "?");
//안녕하세요?
|
cs |
replace에서는 의도한 대로 나왔다
2) replaceAll
1
2
3
4
|
String hi = "안녕하세요.";
String result6 = hi.replaceAll(".", "?");
//??????
|
cs |
replaceAll에서는 .을 정규식에서 쓰는 모든 문자를 지칭하는 .으로 보고 "안녕하세요"까지 ?로 바꿔버렸다
이렇듯 둘의 용도는 다르기 때문에 상황에 맞게 사용해야 한다.
replaceFirst(String regex, String replacement)
이름에서 예상 가겠지만 첫번째 나오는 문자열만 바꿔주는 기능을 가졌다
1
2
3
4
|
String colors = "red, red, green, blue";
colors = colors.replaceFirst("red", "white");
//white, red, green, blue
|
cs |