1️⃣ replace()
모든 일치하는 '문자열'을 바꾼다
replace()
는 이름 그대로 문자열을 치환합니다.
여기서 가장 중요한 포인트는 첫 번째 인자로 문자열 리터럴(Literal), 즉 '있는 그대로의 텍스트'를 받는다는 점입니다.
- 동작 방식: 지정된 문자열(CharSequence)을 찾아 모두 교체합니다.
- 특징: 정규식(Regex)을 해석하지 않고, 단순 텍스트로만 비교합니다.
예시 코드:
⚠️replace()는 첫 번째 하나만 바꾸는 것이 아니라, 일치하는 모든 문자열을 바꿉니다 오해 금지!!
String text = "hello java, world java!";
// "java"라는 문자열을 "kotlin"으로 모두 바꾼다.
String result = text.replace("java", "kotlin");
System.out.println(result);
// 출력: hello kotlin, world kotlin!
2️⃣ replaceAll()
'정규식 패턴'과 일치하는 모든 것을 바꾼다
replaceAll()
의 핵심은 첫 번째 인자로 정규식(Regular Expression)을 받는다는 것입니다.
이 덕분에 단순한 텍스트를 넘어 복잡한 패턴을 찾아 치환할 수 있습니다.
- 동작 방식: 지정된 정규식 패턴과 일치하는 모든 부분을 찾아 교체합니다.
- 특징: 강력한 패턴 매칭이 가능합니다.
예시 코드 1: 숫자 모두 제거하기
String text = "My phone number is 010-1234-5678";
// [0-9]는 모든 숫자를 의미하는 정규식
String result = text.replaceAll("[0-9]", "*");
System.out.println(result);
// 출력: My phone number is ***-****-****
예시 코드 2: 특수문자 치환 시 주의점
만약 마침표(.
)처럼 정규식에서 특별한 의미를 갖는 문자를 치환하고 싶다면, 반드시 이스케이프(\\
) 처리를 해야 합니다.
String text = "file.name.txt";
// 잘못된 사용: .은 '모든 문자'를 의미하므로 전부 바뀐다.
String wrongResult = text.replaceAll(".", "#");
System.out.println(wrongResult); // 출력: #############
// 올바른 사용: \\. 으로 마침표 자체를 의미하도록 한다.
String correctResult = text.replaceAll("\\.", "#");
System.out.println(correctResult); // 출력: file#name#txt
핵심 비교 및 성능
구분 | replace() |
replaceAll() |
---|---|---|
첫 번째 인자 | 문자열 리터럴 (CharSequence) | 정규식 (Regular Expression) |
처리 방식 | 단순 텍스트 비교 | 정규식 패턴 매칭 |
성능 | 빠름 | 상대적으로 느림 (정규식 컴파일 과정 필요) |
사용 시점 | 고정된 문자열을 치환할 때 | 숫자, 특수문자 등 특정 패턴을 치환할 때 |
성능 차이가 나는 이유는 replaceAll()
이 내부적으로 정규식을 컴파일하는 추가적인 과정을 거치기 때문입니다.
따라서 단순한 문자열 치환이라면 고민 없이 replace()
를 쓰는 것이 좋습니다.
💡결론
이것만 기억하세요!!
단순 텍스트 치환이 필요하면
replace()
정규식을 이용한 패턴 치환이 필요하면replaceAll()
'Backend > Java' 카테고리의 다른 글
[Java] 자바 정규 표현식(Regular Expression) 정리 (1) | 2025.08.05 |
---|---|
[Java] switch 문 최신 문법까지 정리해보기 (Java 14+) (0) | 2025.07.29 |
[Java] 약수의 개수를 구하는 효율적인 알고리즘 정리 (0) | 2025.07.16 |
[Java] 배열 복사 메서드 간단 정리 (0) | 2025.07.15 |
[Java, String] split() 메서드 정리 - 문자열 자르기 (0) | 2025.07.13 |