[JAVA] 자바 문자열 치환 방법 raplace, replaceAll 차이점

java replaceAll 문자열 치환방법에 대해 알아보겠습니다.

개발을 하다보면 replace를 쓰는 경우도 종종 있지만 replaceAll() 을 쓰는경우가 많습니다. 

어떤형태의 문자열이 올지 모르는 경우가 종종 있기 때문입니다. 

그래서 정규표현식을 이용하여 사용하는 경우가 많습니다. 

replace와 replaceAll 은 사용하는 용도가 약간은 다르니 용도에 맞게 사용하시면 됩니다. 

 

String replace(CharSequence target, CharSequence replacement)
replace(찾을문자열, 바꿀문자열) 

package main.java;

public class test2 {

    public static void main(String[] args) {

        String str = "I have a pen. I have an apple. I have pineapple";

        str = str.replace("I", "You"); // I 문자를 YOU로 변경

        System.out.println(str);
        // 결과 : You have a pen. You have an apple. You have pineapple

    }
}

결과 : You have a pen. You have an apple. You have pineapple

알파벳 i -> You 로 치환하였습니다.

replace 메소드는 문자열에서 변경하고 싶은 문자열을 찾아 치환합니다.

 

String replaceAll(String regex, String replacement)
replaceAll(정규식 또는 기존문자, 대체문자)

package main.java;

public class test2 {

    public static void main(String[] args) {

        String  str = "자동차 가격은 300,000,000원 입니다.";
        str = str.replaceAll("[0-9]", "A");
        System.out.println(str); // 결과 : 자동차 가격은 AAA,AAA,AAA원 입니다.

	String str2 = "자동차 가격은 300,000,000원 입니다.";
        str2 = str2.replaceAll("자동차", "CAR");
        System.out.println(str2); // 결과 : CAR 가격은 300,000,000원 입니다.
    }
}

첫번째 str 의 결과 값 : 자동차 가격은 AAA,AAA,AAA원 입니다.

정규식 [0-9](숫자만)을 사용하여 숫자는 모두 A로 치환하였습니다.

 

두번째 str2 의 결과 값 : CAR 가격은 300,000,000원 입니다.

정규식이 아닌 문자를 입력하였을때에는 replace와 같은 기능을 가지고 있습니다.

 

replaceAll 메소드는 문자열에서 특정 문자를 다른문자로 전체 치환하는 메소드입니다. 

 

replace와 replaceAll의 차이점을 한곳에서 비교해보겠습니다.

package main.java;

public class test2 {

    public static void main(String[] args) {

        String  str = "안녕하세요. 반가워요. 또 놀러오세요.";
        str = str.replace(".", "^^");
        System.out.println(str); // 결과 : 안녕하세요^^ 반가워요^^ 또 놀러오세요^^

        String str2 = "안녕하세요. 반가워요. 또 놀러오세요.";
        str2 = str2.replaceAll(".", "^^");
        System.out.println(str2); // 결과 : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    }
}

같은문자열로 비교해보니 비교가 편합니다.

 

replace는 .(점)을 문자로 인식하여 점 세개를 ^^ 웃는모양으로 치환하였습니다.

 

replaceAll은 .(점)을 정규식으로 인식하여 .(점)은 정규식으로 모든문자를 표현합니다.

 

그래서 str2의 결과값은 모든 문자를 ^^ 웃는 얼굴로 치환하였습니다.

결과값으로 보니 차이점이 확실히 나오네요.

 

replaceFirst(String regex, String replacement)

package main.java;

public class test2 {

    public static void main(String[] args) {

        String  str = "사과. 사과. 포도.";
        str = str.replaceFirst("사과", "수박");
        System.out.println(str); // 결과 : 수박. 사과. 포도

    }
}

문자열에서 처음으로 찾은 문자 하나만 변경처리합니다. 

 

JAVA에서는 공백제거하는 대표적인 trim() 메소드가 있습니다.

trim() 메소드는 문자열의 앞뒤만 공백제거 하지만 replaceAll은 모든 공백을 제거할 수 있습니다.

 

괄호 [ ] 로 특수문자로 인식해주는 방법입니다.

package main.java;

public class test2 {

    public static void main(String[] args) {

        String  str = "안녕하세요? * + $ | 입니다.";
        System.out.println(str.replaceAll("[*]", "A")); 
        // 안녕하세요? A + $ | 입니다.

        System.out.println(str.replaceAll("[+]", "A"));
        // 안녕하세요? * A $ | 입니다.

        System.out.println(str.replaceAll("[$]", "A"));
        // 안녕하세요? * + A | 입니다.

        System.out.println(str.replaceAll("[|]", "A"));
        //안녕하세요? * + $ A 입니다.

    }
}


소괄호, 중괄호, 대괄호, ^ 는 앞에 \\를 붙여야 사용이 가능합니다.

package main.java;

public class test2 {

    public static void main(String[] args) {

        String  str = "이것은 컴퓨터 (computer) 입니다..";
        System.out.println(str.replaceAll("\\(", "★"));
        // 이것은 컴퓨터 ★computer) 입니다..

        /*
         \\를 붙여줘야 하는 특수문자입니다.
        (   \\(
        ) ⇒ \\)
        { ⇒ \\{
        } ⇒ \\}
        ^ ⇒ \\^
        [ ⇒ \\[
        ] ⇒ \\]
        */
    }
}

댓글

Designed by JB FACTORY