본문 바로가기

JAVA/Study

31.문자열 변경, 특정구간추출, 특정문자의 위치, 문자열 분리, 문자열의 배열로 - replace,substring,indexOf,split

문자열의 길이 = 글자수

문자열의 전체를 초기화할때는

String str = "처음만들어졌습니다";

str = "초기화당해버렸습니다"; --이런식으로 전체를 바꿀수 있다

그치만 일부의값만 변경을 하고싶을때도 있는법

문자열명.replace("기존값","바꿀값"); 으로하면 할수있다

단, ex를보고 조심해야할점을 판단할것

 

String exstr = "가나초콜렛 가나다라 도도한나초";

exstr = exstr.replace("가나","그러나");

---> exstr : "그러나초콜렛 그러나다라 도도한나초"

exstr = exstr.replace("나초","동충하초");

---->exstr: "그러동충하초콜렛 그러나다라 도도한동충하초"

주의하지 않으면 이렇게 도도한동충하초가 되어버린다

 
replaceAll도 있는데 사용법은 거의 흡사하나
replaceAll(정규식,바꿀문자) 가 추가되어있어서
예를들어 [a-zA-Z] 는 영어 소문자,대문자 전체라는 뜻의 정규식(=정규표현식)인데
이걸 사용해서 예를 들어보겠다
String strex = "가 1 A 나 2 B 다 3 C";
strex = strex.replaceAll("[a-zA-Z]","도레미");
---> strex : "가 1 도레미 나 2 도레미 다 3 도레미" 이런식으로 바뀐다
 
replaceFirst는 왼쪽에서부터 시작해서 가장 처음만난 기존값 한번만 바꾸는것
 
 
substring은 문자열에서 특정 구간을 갖고올수있는데
문자열명.substring(시작,끝); --->여기서 끝은 전 까지이다  <=이 아니라 < 라는뜻
예를들어
String str = "0123456789ABCDEF";
String test = str.substring(5,9); 라고하면
test는 "5678" 이 되는거다
 
indexOf 는 문자열에서 특정 문자 위치 또는 특정 문자열의 시작 위치를 알 수 있다
ex)
String str = "0123456789ABCDEF";
System.out.println(str.indexOf("A")); ---> 10
System.out.println(str.indexOf("EF"));--->14
System.out.println(str.indexOf("good"));----> -1 (없는값은 -로 출력된다)

배열명.split("기준문자"); 로 문자열을 문자열의 배열로 나눌수있는데 아래쪽에서 확인해보면될것같다


public class Example {

    public static void main(String[] args) {
        //문자열 길이
        String data = "호뇰룔룔료";
        int len = data.length();
        System.out.println(data);
        System.out.println("data의 글자 수 : "+data.length());
        System.out.println("data의 글자 수 : "+len);
       
        //문자열 전체변경
        data = "호뉼률률류 라랄라~!";
        System.out.println(data);
        System.out.println(data.length());
       
        //문자열 일부변경
        data = data.replace("라랄라", "오예");
        System.out.println(data);
        System.out.println(data.length());
        data = data.replace("~!", "");
        System.out.println(data);
        System.out.println(data.length());
       
        //문자의 특정 구간을 갖고오기
        String ju = "920711-2208033";
        String year = ju.substring(0, 2);//0,1이 아닌이유는 (시작, 여기 전까지)라서
        String month = ju.substring(2,4);
        String day = ju.substring(4,6);
        System.out.printf("%s년%s월%s일\n",year,month,day);
       
        //특정 문자의 위치찾기
        int pos = ju.indexOf("-");
        System.out.println("-의 위치는 : "+pos+"입니다");
        int pos2 =ju.indexOf("*");
        if(pos2<0){
            System.out.println("유효하지않은 입력값");
        }
        System.out.println(pos2); //없는 위치값을 입력하면 -1출력
       
        //문자열 분리 - token
        String dates = "1992-07-11";
        String names = "강아지-고양이-너구리-라쿤";
       
        //문자열의 배열로 분리 - 문자열에서 특정구분자(token)을 기준으로 또 다른 여러문자열로 분리
        String[] date = dates.split("-"); //split : 쪼개다
        String name[]=names.split("-");
        //x.length : 문자열 배열의 길이
        for(int i=0;i<date.length;i++){//문자열의 배열의 배열이기때문에 length가 아닌
            System.out.println(date[i]);
        }
        for(int i=0;i<name.length;i++){
            System.out.println(name[i]);
        }
    }

}

출력값
호뇰룔룔료
data의 글자 수 : 5
data의 글자 수 : 5
호뉼률률류 라랄라~!
11
호뉼률률류 오예~!
10
호뉼률률류 오예
8
92년07월11일
-의 위치는 : 6입니다
유효하지않은 입력값
-1
1992
07
11
강아지
고양이
너구리
라쿤