티스토리 뷰

안녕하세요. 자바에는 문자열을 변환할수 있는 메소드들이 있습니다.

메소드명을 보시면 대충 감이 오실텐데요. 오늘은 replace, replaceAll 두가지 메소드에 대해 자세히 알아보겠습니다.

 

먼저 사용법을 설명하겠습니다.

replace는 말 그대로 특정 문자열을 원하는 문자열로 치환하는 메소드입니다.

 

예제를 통해서 알아보겠습니다.

 

 String str = "aaa1";
  
  String result = str.replace("1", "");
  
  System.out.println("result->"+ result);

 

이렇게 했을때 결과값이 어떤값이 나올까요?

왼쪽 인자값이 찾을문자열 , 오른쪽이 변환될 문자열 입니다.

결국 저 예제문은 str에 있는 문자열 aaa1 중 1을 찾아서 "" 공백으로 변환합니다.

 

 

이클립스에서 실행시켜보면 결과값 aaa 가 출력되는걸 확인하실수 있습니다.

 

그럼 replaceAll을 메소드를 사용하면 어떨까요?

  String str = "aaa1";
  
  String result = str.replaceAll("1", "");
  
  System.out.println("result->"+ result);

 

결과값은 replace사용했을때와 마찬가지입니다.

얼핏 생각해보면 두 메소드는 차이가 없어 보입니다.

하지만 분명한 차이점이 있답니다.

 

String replace(CharSequnce target, CharSequence replacement)

String replaceAll(String regex, String replacement)

 

말 그대로 replace는 첫번째 인자값을 보시면 문자열이 들어갑니다. 문자열만 변환가능한데 반해서

replaceAll은 첫번째 인자값에 정규식이 들어갑니다. 정규식에 대해 잘 모르시는 분도 계시겠지만 이부분은 나중에 더 자세히 알아보겠습니다. 정규식을 이용하면 불특정 문자열을 변환할수 있는 장점이 있습니다.

한번 예제를 통해서 알아보겠습니다.

 

  String str = "aaabbbccccabcddddabcdeeee";
  
  String result1 = str.replace("abc", "왕");
  String result2 = str.replaceAll("[abc]", "왕");
  
  System.out.println("replace result->"+ result1);
  System.out.println("replaceAll result->"+ result2);

 

결과값

replace result->aaabbbcccc왕dddd왕deeee
replaceAll result->왕왕왕왕왕왕왕왕왕왕왕왕왕dddd왕왕왕deeee

결과값을 보시면 replaceAll에는 정규식을 사용할수가 있어서 replace에서 처리하지 못한 문자열도 처리가 가능합니다.

[abc]  정규식 표현입니다. [abc]는 []안에 있는 문자들을 전부 왕으로 변환시켜줍니다. a or b or c 3가지의 문자를 만나면 전부 치환대상이 됩니다. 만약 replace를 정규식을 사용하지 않고 원한는 결과값을 얻기 위해서 코딩을 해보겠습니다.

 

  String str = "aaabbbccccabcddddabcdeeee";
  
  String result1 = str.replace("a", "왕").replace("b", "왕").replace("c", "왕");
  String result2 = str.replaceAll("[abc]", "왕");
  
  System.out.println("   replace result->"+ result1);
  System.out.println("replaceAll result->"+ result2);

 

   replace result->왕왕왕왕왕왕왕왕왕왕왕왕왕dddd왕왕왕deeee
replaceAll result->왕왕왕왕왕왕왕왕왕왕왕왕왕dddd왕왕왕deeee

 

이렇게 코딩을 하니 결과값이 같아졌습니다. 하지만 저렇게 하려면 상당히 코딩량이 많아지고 비효율적이겠죠. 더군다난 검색할 문자가 더 많아진다면...결국은 replace로는 불가능한 방법입니다.

 

replaceAll을 이용하여 정규식을 사용하면 정말 많은걸 할수가 있습니다.

 

  String str = "testa1testbccc2testccc3";
  str = str.replaceAll("[^0-9]", "");
  
  System.out.println(str);

해당 정규식을 간단히 알아보겠습니다. 해당 정슈식은 숫자를 찾아주는 정규식입니다.

숫자가 아닌 값은 전부 빈문자열로 치환하라는 의미입니다.

 

결과값은 123
출력됩니다.

숫자만 찾고자 할때 유용하게 쓰이겠죠..

 

그럼 약간 변형해서 다시 해보겠습니다.

 

  String str = "testa1testbccc2testccc3";
  str = str.replaceAll("[0-9]", "");
  
  System.out.println(str);

 

해당결과값은

testatestbccctestccc
가 출력됩니다.

 

이번꺼는 숫자는 전부 빈문자열로 치환해서 문자열만 출력되게 됩니다.

여기까지 보시면 ("[^0-9]", "");, ("[0-9]", "");

두가지 차이점을 아실수 있겠죠.. ^는 아니다를 의미합니다 0-9 0부터 9까지의 숫자가 아닌것을 전부 문자열로 치환하라는 의미죠.

 

이런식으로 정규식을 이용한다면 편리하게 원하는 결과값을 찾을수 있습니다.

 

 

 

 

댓글