TIL - 22.12.26

자라나는 ㅇㅅㅇ개발자·2022년 12월 26일
0

TIL

목록 보기
40/126

오늘 프로그래머스 알고리즘 문제를 풀어보던 도중 랜덤한 알파벳으로 이루어진 문자열에서 모음(a,e,i,o,u)를 지운 문자열을 반환하라는 문제를 풀어보았다.
처음 아이디어는 문자열을 배열로 바꾼 뒤 for문으로 제거하는 방법을 생각해보았지만, 보다 간편한 방법이 있을거 같아 구글링으로 검색을 해보았는데 이 때 나오는 방법이 .replace이었다.

public class Test_27_RemoveVowels {
    public String solution(String my_string) {
        String answer = my_string
                .replace("a","")
                .replace("e","")
                .replace("i","")
                .replace("o","")
                .replace("u","");
        return answer;
    }
}

.replace 사용 방법을 확인하고 코드를 써보던 도중 .replaceAll도 있다는걸 알게되었고 둘 다 사용해보았는데 둘의 결과는 동일했지만 안에 들어가는 인자 형식이

.replace(target, replacement)
.replaceAll(regex, replacement)

로 분명 차이점이 있어보였고 그래서 차이점에 대해 알아보기로 하였다.

.replace는 말 그대로 문자열을 다른 문자열로 변환할 수 있지만,
.replaceAll은 첫번째 인자로 정규식이 들어갈 수 있다.
내가 구글링해본 블로그의 예시를 빌려보자면

public class Test_27_ReplaceAllTest {
    public void solution(String my_string) {
        String answer1 = my_string.replace("abc","왕");
        String answer2 = my_string.replaceAll("[abc]","왕");
        System.out.println(answer1);
        System.out.println(answer2);
    }

    public static void main(String[] args) {
        Test_27_ReplaceAllTest sol = new Test_27_ReplaceAllTest();
        String my_string = "aabbccddabc";
        sol.solution(my_string);
    }
}

결과값 :
aabbccdd왕
왕왕왕왕왕왕dd왕왕왕

이처럼 .replace는 문자열 abc를 빈 여백으로 변환하지만
.replace는 정규식을 사용할 수 있어서 a,b,c가 있다면 전부 변환이 가능하게 할 수 있다.

정규식을 사용한다면 보다 다양하고 편한 기능을 사용할 수 있는데

String str = "test1test2test3";
str = ste.replaceAll("[^0-9]","");

System.out.println(str);

결과값 :
123

숫자가 아닌 모든 값들을 빈 문자열로 치환할 수 있게된다.
정말 놀라워!
사용방법도 간단해서 여러군데에서 활용할 수 있을거같닿ㅎㅎ

0개의 댓글