JAVA

[자바/JAVA] 프로그래밍 - API_String (3) StringTokenizer

21종 2023. 6. 14. 15:31

구분자를 기준으로 해서 문자열을 분리시키는 방법

 

방법 1. 분리된 문자열들을 String[] 배열에 차곡차곡 담고자 할 때

String 클래스에서 제공하는 split 메소드 이용
문자열.split(구분자) : String[]

String str = "Java,Oracle,JDBC,HTML,CSS,Spring";

String[] arr = str.split(",");
System.out.println("arr 배열의 길이 : " + arr.length);

/*
for(int i = 0; i < arr.length; i++) {
    System.out.println(i + "번째 인덱스 : " + arr[i]);
}
*/

int count = 0;
for(String a : arr) {	// a = arr[0], a = arr[1]...
    System.out.println(count + "번째 인덱스 : " + a);
    count++;
}

실행 결과


방법 2. 분리된 문자열들을 각각 토큰으로써 관리하고자 할 때

java.util.StringTokenizer 클래스를 이용하는 방법
StringTokenizer stn = new StringTokenizer(분리시키고자 하는 문자열, 구분자);

String str = "Java,Oracle,JDBC,HTML,CSS,Spring";

StringTokenizer stn = new StringTokenizer(str, ",");

System.out.println("분리된 문자열의 개수 : " + stn.countTokens());
System.out.println(stn.nextToken());
System.out.println(stn.nextToken());
System.out.println(stn.nextToken());
System.out.println(stn.nextToken());
System.out.println(stn.nextToken());
System.out.println(stn.nextToken());

System.out.println(stn.countTokens()); // 다 뽑으면 끝남.. 일회성 --> 토큰갯수가 0으로 나옴

// System.out.println(stn.nextToken());	// NoSuchElementException : 더 이상 요소가 없다...

 

반복문을 이용해서 출력한다면  ?

String str = "Java,Oracle,JDBC,HTML,CSS,Spring";

StringTokenizer stn = new StringTokenizer(str, ",");

for(int i = 0; i < stn.countTokens(); i++) {
    System.out.println(stn.nextToken());
}

뭔가 잘 나오다가 만다. 그 이유는 출력할때마다 토큰의 갯수가 줄기 때문에 stn.countTokens() 의 값이 1씩 떨어진다.

i = 0 i < 6 true 출력("JAVA") i++
i = 1 i < 5 true 출력("Oracle") i++
i = 2 i < 4 true 출력("JDBC") i++
i = 3 i < 3 false 출력 안됨


해결방법 1.

String str = "Java,Oracle,JDBC,HTML,CSS,Spring";

StringTokenizer stn = new StringTokenizer(str, ",");

int count1 = stn.countTokens();	// 6
for(int i = 0; i < count1; i++) {	// count를 사용하여 값을 고정시키기
    System.out.println(stn.nextToken());
}

 

해결방법 2.

String str = "Java,Oracle,JDBC,HTML,CSS,Spring";

StringTokenizer stn = new StringTokenizer(str, ",");

while(stn.hasMoreTokens()) {	// 반복 수행될 조건 : 토큰이 남아있을때만 출력
    System.out.println(stn.nextToken());
}

 

실행 결과