Java에서 문자열을 처리할 때 자주 사용하는 메서드 중 두 가지가 바로 replace와 replaceAll입니다. 두 메서드는 문자열 내에서 특정 부분을 대체하는 데 사용되지만, 동작 방식과 적용 범위에서 차이가 있습니다. 이 글에서는 두 메서드의 차이점, 사용법, 그리고 예제 코드를 통해 이해를 돕겠습니다.
1. replace 메서드
replace 메서드는 문자열에서 특정 문자 또는 문자열을 찾아서 대체합니다. 정규 표현식을 지원하지 않고, 단순히 지정된 값으로 대체하는 역할을 합니다.
public String replace(CharSequence target, CharSequence replacement)
-replace는 정규 표현식을 지원하지 않습니다.
-대체할 문자열과 대체될 문자열을 그대로 사용합니다.
-문자열 내 모든 일치 항목을 대체합니다.
2. replaceAll 메서드
replaceAll 메서드는 문자열에서 정규 표현식과 일치하는 모든 부분을 찾아 대체합니다. 이 메서드는 정규 표현식을 사용할 때 유용합니다.
public String replaceAll(String regex, String replacement)
-정규 표현식을 지원합니다.
-대체할 패턴은 정규 표현식으로 작성해야 합니다.
-문자열 내에서 정규 표현식과 일치하는 모든 항목을 대체합니다.
3. 주요 차이점 비교
특징 | replace | replaceAll |
지원 방식 | 단순 문자/문자열 매칭 | 정규 표현식 지원 |
사용 패턴 | 문자 또는 문자열 | 정규 표현식 |
사용 목적 | 특정 문자/문자열을 대체 | 정규 표현식과 일치하는 패턴을 대체 |
메서드 시그니처 | replace(CharSequence, CharSequence) | replaceAll(String, String) |
4. 주의할 점
1) 정규 표현식과의 차이점 이해
-replaceAll은 정규 표현식을 지원하기 때문에, 단순 문자열을 대체하려면 정규 표현식의 메타문자를 주의해야 합니다. 예를 들어, "."는 정규 표현식에서 모든 문자를 의미하므로 "\\."처럼 이스케이프 처리해야 합니다.
2) replaceFirst와의 비교
-replaceAll과 달리 replaceFirst는 문자열 내에서 첫 번째 일치 항목만 대체합니다.
3) 성능 차이
-정규 표현식을 사용하는 replaceAll은 replace에 비해 약간 더 느릴 수 있으므로, 단순한 대체 작업에는 replace를 사용하는 것이 좋습니다.
5. 예제코드
public class TEST {
public static void main(String[] args) throws Exception {
// Original string
String original = "Hello World, Hello Java! abc123def456ghi789";
// 1. replace() 예제: 단순 문자열 대체
System.out.println("=== replace() 예제 ===");
//Hello > Hi 대체
String replaceResult1 = original.replace("Hello", "Hi");
System.out.println(replaceResult1); // "Hi World, Hi Java! abc123def456ghi789"
//o > 0 대체
String replaceResult2 = original.replace('o', '0');
System.out.println(replaceResult2); // "Hell0 W0rld, Hell0 Java! abc123def456ghi789"
// 2. replaceAll() 예제: 정규 표현식 사용
System.out.println("\n=== replaceAll() 예제 ===");
//숫자 > # 대체
String replaceAllResult1 = original.replaceAll("\\d", "#");
System.out.println(replaceAllResult1); // "Hello World, Hello Java! abc###def###ghi###"
//연속된 숫자 > # 대체
String replaceAllResult2 = original.replaceAll("\\d+", "#");
System.out.println(replaceAllResult2); // "Hello World, Hello Java! abc#def#ghi#"
//영어 소문자 > * 대체
String replaceAllResult3 = original.replaceAll("[a-z]", "*");
System.out.println(replaceAllResult3); // "H**** W****, H**** J***! ***123***456***789"
// 3. 응용 예제
System.out.println("\n=== 응용 예제 ===");
// 공백 제거
String textWithSpaces = "Java Programming Language";
String noSpaces = textWithSpaces.replaceAll("\\s+", "");
System.out.println(noSpaces); // "JavaProgrammingLanguage"
// 전화번호 마스킹
String phoneNumber = "010-1234-5678";
String maskedPhone = phoneNumber.replaceAll("\\d{4}$", "****");
System.out.println(maskedPhone); // "010-1234-****"
// URL 프로토콜 교체
String url = "http://example.com";
String secureUrl = url.replace("http", "https");
System.out.println(secureUrl); // "https://example.com"
}
}
'개발이야기 > Java' 카테고리의 다른 글
[Java] enum(Enumeration) 사용방법, 예제, 활용방법, 장점 (0) | 2024.07.03 |
---|---|
[Java] Stream(스트림) API 사용방법, 예제 (0) | 2024.07.02 |
[Java] @JsonProperty, @JsonFormat, @JsonIgnore 사용방법, 예제 (Jackson 어노테이션) (0) | 2024.06.18 |
[Java] 로그(log) 파일 만들기 (Logger 클래스 사용) (0) | 2024.05.23 |
[Java] 문자열에서 숫자만 추출하기 (메서드, 예제코드) (0) | 2024.05.16 |
댓글