오늘 프로그래머스 알고리즘 문제를 풀어보던 도중 랜덤한 알파벳으로 이루어진 문자열에서 모음(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
숫자가 아닌 모든 값들을 빈 문자열로 치환할 수 있게된다.
정말 놀라워!
사용방법도 간단해서 여러군데에서 활용할 수 있을거같닿ㅎㅎ