java 언어는 문자열 치환의 다양한 메소드를 제공하고 있습니다.
java의 replace 함수에 대해 알아봅시다.
기본적인 replace함수입니다.
설명 : replace("찿을문자열" ,"바꿀문자열")
ex)
String s="판도리카야 안녕";
String s2=s.replace("판도리카야", "정희");
System.out.println(s2);
결과는 : "정희 안녕"
처음나오는 단어를 찿아서 바꾸어주는 함수입니다.
설명 : replaceFirst("찿을문자열" ,"바꿀문자열")
ex)
String s="예선이가 판도리카에게 나 시험 예선 통과했어라고 말했다";
String s2=s.replaceFirst("예선","은영");
System.out.println(s2);
결과는 : "은영이가 판도리카에게 나 시험 예선 통과했어라고 말했다";
모든 문자를 찿아서 바꾸어주눈 함수입니다.
설명 : replaceAll("찿을문자열" ,"바꿀문자열")
ex)
String s="예선이가 판도리카에게 나 시험 예선 통과했어라고 말했다";
String s2=s.replaceAll("예선","은영");
System.out.println(s2);
결과는 : "은영이가 판도리카에게 나 시험 은영 통과했어라고 말했다"
마지막 문자열을 찿아서 바꾸어주는 함수이다.
java api에서 기본으로 제공하지 않아서 만들어봤습니다.
private static String replaceLast(String string, String toReplace, String replacement) {
int pos = string.lastIndexOf(toReplace);
if (pos > -1) {
return string.substring(0, pos)+ replacement + string.substring(pos + toReplace.length(), string.length());
} else {
return string;
}
}
ex)
String s="내가 사랑 하고 보고싶다는게 진짜사랑인거같아";
String s2=replaceLast(s, "사랑, "미워");
System.out.println(s2);
결과는 :"내가 사랑하고 보고싶다는게 진짜미워인거같아";
Java 1.4 까지는 String Class에는
String replace(char oldChar, char newChar)
와
String replaceAll(String regex, String replacement)
메소드만 있었습니다.
메소드 원형에서 보듯이 replace 는 기본적으로 1글자만 대상으로 선택해서 replace 할 수 있었고
replaceAll는 여러 문자를 바꿀 수 있었습니다.
ex)
String str = "abc";
str.replace('a','z'); // 결과 "zbc"
str.replaceAll("bc", "zzz"); // 결과 "azzz"
그러나 replace 기능의 1글자 변경이 기능이 부족하여
Java 1.5 부터는 String Class에
String replace(CharSequence target, CharSequence replacement)
가 추가로 생겨 replace 를 여러 글자로도 가능하게 되었습니다.
그렇다면 Java 1.5의 str.replace("bc","zzz") 와 str.replaceAll("bc","zzz") 는 무슨차이가
있냐하면 예제의 상황에서는 동일한 결과가 나옵니다.
그러나 replaceAll 의 첫번째 인자는 단순한 string 이 아니라 regex 를 받는데
이는 다양한 regular expression 을 쓸수 있음을 의미합니다.
str.replace("a.?c","zz"); // 결과 "abc". 변화가 없음
str.replaceAll("a.?c","zz"); // 결과 "zz". '.?' 이 특수한 의미로 해석됨.
자세한 설명은 javadoc 문서를 참고하시기 바랍니다.
replaceAll에서 쓰일수있는 regex 의 표현법은
을 참고하시기 바랍니다.
'이전것 > JAVA' 카테고리의 다른 글
java 프로그램 실행시간 측정 (0) | 2017.01.20 |
---|---|
JAVA HTML 태그 또는 모든 태그 형식 제거 (0) | 2017.01.16 |
Socket으로 부터 읽고/쓰는 방법 (0) | 2016.12.30 |
3) 프로그램 만들기 (0) | 2016.12.26 |
2) 클래스와 객체 (0) | 2016.12.26 |