본문 바로가기
JAVA

[JAVA] StringTokenizer, split(), toCharArray()

by Amy IT 2022. 5. 29.

◆ 문자열 나누기 - StringTokenizer, split()

 

java.util.StringTokenizer는 문자열을 특정 구분자로 분리할 수 있는 클래스입니다. StringTokenizer 클래스를 다음과 같이 생성하고 사용할 수 있습니다. 생성자의 첫 번째 값으로 문자열을 설정하고, 두 번째 값으로 구분자를 지정합니다. 구분자를 생략하면 공백을 기준으로 분리합니다. 

StringTokenizer st = new StringTokenizer("홍길동,이순신,유관순", ",");

 

String 클래스의 split() 메소드와 매우 비슷한 기능을 제공하는데, 다음과 같이 다소 차이가 있습니다.

 

  구분 구분한
문자열
여러 구분자로
구분시
구분자가
두 문자 이상
공백 문자열
포함
StringTokenizer 클래스 각각
토큰으로
분리
나열 불가 불가
split()  String
클래스의
메소드
배열로 저장 | 로 구분 가능 가능

 

StringTokenizer의 주로 사용하는 메소드는 다음과 같습니다. 

 

메소드명 설명
hasMoreTokens() 남아있는 토큰이 있는지 여부를 boolean 값으로 반환
nextToken() 다음 토큰을 문자열로 반환
countTokens() 사용하지 않고 남아있는 토큰의 개수 반환

 

 

* 구분자 하나인 경우

String data = "aa/bb/cc,dd/ee/ff,gg/hh/ii";
StringTokenizer st = new StringTokenizer(data, ",");
while (st.hasMoreElements()) {
	System.out.println(st.nextToken());
}

String [] arr = data.split(",");
for (String string : arr) {
	System.out.println(string);
}

 

* 구분자 여러개인 경우

String data2 = "aa/bb/cc,dd/ee/ff,gg/hh/ii";
StringTokenizer st2 = new StringTokenizer(data2, ",/");
for (int i = 0; st2.hasMoreTokens(); i++) {
	System.out.println(st2.nextToken());
}

String [] arr2 = data2.split(",|/");
for (String string : arr2) {
	System.out.println(string);
}

 

* 공백 문자열이 중간에 존재하는 경우

String data3 = "aa,bb,,cc";
StringTokenizer st3 = new StringTokenizer(data3, ",");
while (st3.hasMoreTokens()) {
	System.out.println("StringTokenizer: "+st3.nextToken());
}

String [] arr3 = data3.split(",");
for (String string : arr3) {
	System.out.println("split(): "+string);
}

 

* 공백 문자열이 마지막에 존재하는 경우

String data4 = "aa,bb,cc,";
StringTokenizer st4 = new StringTokenizer(data4, ",");
while (st4.hasMoreTokens()) {
	System.out.println("StringTokenizer: "+st4.nextToken());
}

String [] arr4 = data4.split(",", -1);
for (String string : arr4) {
	System.out.println("split(): "+string);
}

 

* 구분자가 두 문자 이상인 경우

String data5 = "aabcbab";
StringTokenizer st5 = new StringTokenizer(data5, "ab");
while (st5.hasMoreElements()) {
	System.out.println("StringTokenizer: "+st5.nextElement());
}

String [] arr5 = data5.split("ab");
for (String string : arr5) {
	System.out.println("split(): "+string);
}

 

 

 

 

◆ 문자 나누기 - toCharArray()

 

toCharArray()는 String 클래스의 메소드로서, 문자를 한 개씩 뽑아서 문자형 배열로 저장해 줍니다. 

String data6 = "hello world!";
char [] arr6 = data6.toCharArray();
System.out.println("문자개수(띄어쓰기포함): "+arr6.length);
for (char c : arr6) {
	System.out.println(c);
}

 

 

 

 

◆ 활용 

 

* 문자열로 나열된 숫자의 총합 구하기

StringTokenizer st = new StringTokenizer("9,1,5,6,3", ",");
int total = 0;
while (st.hasMoreElements()) {
	total += Integer.parseInt(st.nextToken());
}
System.out.println("총합: "+total);

 

* 단어 개수, 문자 개수 구하기

String str = "What a lovely day";
StringTokenizer st = new StringTokenizer(str);
int wordCount = 0;
while (st.hasMoreElements()) {
	System.out.print(st.nextToken()+" ");
	wordCount++;
}
System.out.println("단어개수: "+wordCount);

int charCount = 0;
for (char c : str.toCharArray()) {
	if (c == ' ') continue;
	System.out.print(c+" ");
	charCount++;
}
System.out.println("문자개수(띄어쓰기미포함): "+charCount);

 

 

 

댓글