문자열 안에서 특정 문자열을 찾아서 다른 문자열로 통째로 바꿔주는 메서드입니다.
String s = "hello world";
String result = s.replace("o", "0");
System.out.println(result); // "hell0 w0rld"
"o"라는 문자를 찾아서 전부 "0"으로 바꿔준 겁니다. 문자열에 등장하는 모든 위치를 한 번에 바꿔줍니다.
코테에서는 "바꾸기"보다 "지우기" 용도로 압도적으로 많이 씁니다. 바꿀 대상을 빈 문자열("") 로 주면, 찾은 문자열이 그냥 사라지는 효과가 납니다.
String s = "110010101001";
String result = s.replace("0", "");
System.out.println(result); // "1111"
"0"을 찾아서 ""(아무것도 없음)으로 바꿨으니, 결과적으로 0이 다 지워진 거예요.
replace는 한 글자뿐 아니라 여러 글자로 된 문자열도 찾아서 바꿀 수 있습니다.
String s = "I like apple, apple is sweet";
String result = s.replace("apple", "banana");
System.out.println(result); // "I like banana, banana is sweet"
replace는 특수문자가 들어있어도 신경 쓸 필요가 없습니다. 찾는 문자열을 있는 그대로 비교하기 때문입니다.
String s = "a.b.c";
String result = s.replace(".", "-");
System.out.println(result); // "a-b-c"
.이라는 문자를 그냥 점 그 자체로 인식해서 바꿔줍니다. (참고로 replaceAll이라는 비슷한 이름의 메서드가 있는데, 그건 정규식으로 동작해서 .을 "모든 문자"라는 의미로 해석합니다. 헷갈리기 쉬우니 replace와는 다른 메서드라고 구분해서 알아두면 좋습니다.)
자바의 String은 불변(immutable) 객체라서, replace()를 호출해도 원본 문자열은 그대로 있고, 새로운 문자열이 만들어져서 반환됩니다.
String original = "hello";
String result = original.replace("l", "L");
System.out.println(original); // "hello" (그대로 있음)
System.out.println(result); // "heLLo" (새로 만들어진 문자열)
그래서 결과를 받으려면 반드시 변수에 다시 담아야 합니다.
String s = "hello";
s.replace("l", "L"); // 결과를 안 받음 → s는 그대로 "hello"
System.out.println(s); // "hello" (바뀌지 않음!)
s = s.replace("l", "L"); // 결과를 다시 s에 담음
System.out.println(s); // "heLLo" (바뀜)
이 부분에서 실수가 자주 나오니 주의가 필요합니다. replace()를 호출만 하고 결과를 안 받으면 아무 일도 일어나지 않은 것처럼 보입니다.
단순히 지우는 것뿐 아니라, "몇 개를 지웠는지"도 같이 알아야 하는 문제가 많습니다. 이럴 땐 제거 전후의 길이 차이를 활용합니다.
String s = "110010101001";
int beforeLen = s.length(); // 12
String removed = s.replace("0", ""); // "1111"
int afterLen = removed.length(); // 4
int zeroCount = beforeLen - afterLen; // 8 (제거된 0의 개수)
직접 한 글자씩 세는 것보다 코드가 짧고 명확해서, "특정 문자를 지우면서 동시에 몇 개 지웠는지"도 구해야 하는 문제에서 자주 활용됩니다.
// 기본 사용법
String result = s.replace("찾을문자열", "바꿀문자열");
// 지우고 싶을 때 (바꿀 문자열을 빈 문자열로)
String result = s.replace("지울문자열", "");
// 반드시 결과를 다시 담아야 함 (원본은 안 바뀜)
s = s.replace("a", "b");
| 기억할 점 | 내용 |
|---|---|
| 기본 동작 | 문자열을 찾아서 다른 문자열로 교체 |
| 제거할 때 | 바꿀 문자열에 "" 전달 |
| 매칭 방식 | 정규식 아님, 문자 그대로(literal) 비교 |
| 원본 변경 여부 | 변경 안 됨 (새 문자열 반환, 변수에 다시 담아야 함) |
| 개수 세기 응용 | 제거 전/후 length() 차이로 계산 |
코테에서 문자열 제거/치환이 필요한 문제는 정말 자주 나오는데, 일단 replace() 하나만 확실히 손에 익혀두면 대부분의 문자열 가공 문제에서 막힘없이 시작할 수 있습니다.