본문 바로가기
코딩 문제/알고리즘

문자열 치환 - replace(), replaceFirst(), replaceAll()

by CODESIGN 2022. 7. 16.

String 또는 배열에서 원하는 값만 골라서 바꾸고 싶을 때 사용하기 좋은 것이 바로 replace() 메서드이다.

문자열 치환 메서드에는 크게 3가지가 있다.

 

1. replace() 

replace() 메서드는 문자열에서 변경하고 싶은 문자를 검색하고 지정된 문자로 변경하고 새 문자열을 반환한다.

 

public class Main {
	public static void main(String[] args) {
    	String s = "one. 2. one. 2.";
        s = s.replace("one","1");
        Integer.parseint(s);
        System.out.println(s); //결과: 1. 2. 1. 2.
    }
}

 

위의 예제에서 나온 결과 값을 보면, s안의 모든 "one"이 "1"로 바뀌었다.

 

2. replaceFirst()

replace()와 replaceFirst()의 차이점은 replace()는 String안에 지정된 글자가 모두 바뀐다면

replaceFirst()는 지정된 글자가 발견된 첫 번째 경우만 바뀐다.

 

public class Main {
	public static void main(String[] args) {
    	String s = "one. 2. one. 2.";
        s = s.replaceFirst("one","1");
        System.out.println(s); //결과: 1. 2. one. 2.
    }
}

 

위의 예제와 같이 String s안에 "one"은 두 개이지만 첫 번째 "one"만 "1"로 바뀌고 뒤의 "one"은 변하지 않았다.

 

3. replaceAll()

replace()와 replaceAll()의 결과 값은 같을 수 있다.

하지만 차이점은 있다. replace()는 첫번째 값으로 바꿀 문자열을 입력받는 대신 첫 번째 인자 값으로 정규식이 들어간다. 그래서 replace()는 특수문자로도 치환이 되는데 반면 replaceAll()은 특수문자로 치환이 어렵다. 

 

노트 - 정규식이란?

정규표현식은 문자열 처리하는 방법 중의 하나로 특정한 조건의 문자를 '검색'할 때 또는 '치환'하는 과정을 간편하게 처리할 수 있게 해 준다.

대표적인 정규표현식

표현식 설명
^ 문자열의 시작([]대괄호 안에서는 부정을 의미)
$ 문자열의 종료
. 임의의 한 문자 (문자의 종류 가리지 않음)

 

public class Main {
	public static void main(String[] args) {
    	String s = "one. 2. one. 2.";
        s = s.replace(".","/");
        System.out.println(s); //결과: one/ 2/ one/ 2/
    }
}

 

. 을 /로 치환할 경우 replace()는 정상적으로 바꾸어준다.  하지만,

 

public class Main {
	public static void main(String[] args) {
    	String s = "one. 2. one. 2.";
        s = s.replaceAll(".","/");
        System.out.println(s); //결과: ///////////////
    }
}

 

 

replaceAll() 같은 경우 문자열 전체가 /로 치환된다.

. 가 정규식으로 모든 문자를 의미하기 때문에 나타난 현상이다.

 

 

 

 

 

 

참고

 

정규 표현식이란? - 생활코딩

정규표현식 정규표현식(正規表現式, Regular Expression)은 문자열을 처리하는 방법 중의 하나로 특정한 조건의 문자를 '검색'하거나 '치환'하는 과정을 매우 간편하게 처리 할 수 있도록 하는 수단이

opentutorials.org

 

댓글