자바 replace, replaceAll 차이점

친환경 개발자
|2024. 4. 4. 17:25

 

 

자바 문제를 풀 때, 문자값을 변경할 때 사용하는 대표적인 메서드가

 

바로 replace와 replaceAll이다. 

 

주의깊게 생각하지 않고 값 변경 시 replace, replaceAll 모두 사용하다가,

 

둘 다 사용 시 결과값이 비슷하여  문득 차이가 무엇인지 궁금해졌다.

 

 

 

 

 

 

 

replace()와 replaceAll() 사용법

둘 다 원하는 문자값을 다른 문자값으로 대체하는 기능을 한다.

 

메서드 사용법은 아래와 같다.

 

  • String.replace(CharSequence target, CharSequence replacement)
  • String.replaceAll(String regex, String replacement)

 

해당 문자열에서 바꾸고자 하는 문자나 문자열과 일치하는 모든 부분을 수정해준다.

 

 

 

<예시>

String str = "apple banana apple orange apple";

// replace 메서드 사용
String replacedStr = str.replace("apple", "grape");
System.out.println("replace 사용: " + replacedStr); // 출력: grape banana grape orange grape

// replaceAll 메서드 사용
String replacedAllStr = str.replaceAll("apple", "grape");
System.out.println("replaceAll 사용: " + replacedAllStr); // 출력: grape banana grape orange grape

 

 

 

 

 

 

replace, replaceAll 차이점

두 메서드 모두 특정 문자열 모두를 원하는 문자열로 변경한다.

 

그러나 입력하는 입력값의 형태가 엄연히 다르다.

 

 

 

replace에서는 단순 문자 혹은 문자 모음을 입력하며,

 

replaceAll에서는 String regex, 즉 정규표현식을 활용하여 활용 범위가 더 넓다고 할 수 있다.

 

 

 

예를 들어, 문자열의 여러 문자를 한 번에 하나의 문자로 대체하고자 하는 경우,

 

replace 메서드를 사용하면 상당히 번거로운데,

 

이 때 replaceAll 메서드로 정규표현식을 활용하여 쉽게 처리할 수 있다.

 

 

<예시>

public class ReplaceExample {
    public static void main(String[] args) {
        String originalString = "Hello! How are you? 123.";

        // 정규 표현식을 사용하여 모든 비알파벳 문자를 제거하는 replaceAll 사용
        String cleanedString = originalString.replaceAll("[^a-zA-Z0-9]", "");

        System.out.println(originalString);    //출력: Hello! How are you? 123.
        System.out.println(cleanedString);   //출력: HelloHowareyou123
    }
}
  • 정규 표현식 [^a-zA-Z0-9]은 소문자 (a-z), 대문자 (A-Z), 숫자 (0-9)가 아닌 문자를 모두 일치시킴
    (^는 문자 클래스 안에서 부정(not)을 의미).

 

 

그렇다고 무조건 replace 메서드 대신 replaceAll 메서드만 사용하는 것은 좋지 않다.

 

replaceAll 메서드의 경우 구현 과정에서 인스턴스를 생성하여

 

replace 메서드에 비해 성능이 떨어질 수 있기 때문이다.