본문 바로가기

Language, IDE/JAVA, android

[JAVA 자바] StringTokenizer

자바에서는 String을 token단위로 끊어주는 StringTokenizer 클래스를 제공한다.

예를들어 "this is my string" 이라는 스트링을 this, is, my, string 4개의 스트링으로 끊어주는 기능을 제공한다.

그리고 공백말고도 다른 구획문자(delimiter)를 사용할수도 있다. 예를들어 this%is%my%string을 delimiter에 %를 넣어 StringTokenizer를 사용하면 마찬가지로 this, is, my, string으로 읽어준다.

this$%^is$my%string^일때 구획문자를 "$%^"라고 설정해주면 this, is, my, string 으로 끊어준다.


생성자


StringTokenizer(String str)            구획문자(delimiter)를 인자로 받지않는 생성자. 디폴트 구획문자로 공백문자(\t, \n, \r, \f)를 

 가진다.


StringTokenizer(String str,            구획문자(delimiter)를 인자로 받는 생성자. 구획문자는 2자리 이상도 설정할 수 있다. 구획문자를 

String delim)             $%라고 설정하면 $, %를 기준으로 끊어준다. %%라고 설정하면 %를 기준으로 끊어준다 즉 구획 

문자는 길이가1로 고정이고 길이가 2이상인 구획문자를 받으면 구획문자가 여러개가 된다.


StringTokenizer(String str,            구획문자(delimiter)를 인자로 받는 생성자. returnDelims가 true이면 구획문자도 토큰으로 간주한다.

String delilm,             각 구획문자는 길이가 1인 String이 된다. 예를들어 delimiter가 %%라도 % 2개로 저장된다.

 boolean retrunDelims)     returnDeilms가 false면 구획문자를 token으로 사용하지 않는다. 위의 두 생성자는 디폴트로 false를                                      가진다.



주요함수


countTokens()                            토큰의 갯수를 리턴한다.


nextToken()                                다음 토큰을 리턴한다. 이전 토큰은 제거한다.


nextToken(String delim)                구획문자(delimiter)를 delim으로 바꾼 후 바뀐 다음 토큰을 리턴한다. 예를들어 this$1is$1string

이라고 하면 생성자에서 구획문자를$1로 설정했다가 nextToken으로 this를 받고 2번째 nextToken은 delim을 $로 받으면(nextToken("$")) 1is를 리턴한다.


hasMoreTokens()                        리턴할 다음 토큰이 있으면 true를 다음 토큰이 없으면 false를 리턴한다.




예제소스 

import java.util.StringTokenizer;

public class JavaTestMain {

	public static void main(String[] args) {
		
		String str = "this is my string";
		
		StringTokenizer st = new StringTokenizer(str);
		
		System.out.println(st.countTokens());
		
		while(st1.hasMoreTokens()) {
			System.out.println(st.nextToken());
		}
		
		System.out.println(st.countTokens());
	}

}

출력값

4

this

is

my

string

0

위 출력값을 보면 nextToken을 하면 이전 토큰을 제거하기 때문에 토큰의 갯수를 리턴하는 countTokens를 한 결과 토큰값을 추출하기 전에는 4였고 추출한 후에는 0이 되었다.



import java.util.StringTokenizer;

public class JavaTestMain {

	public static void main(String[] args) {
		
		String str = "this%%is%%my%%string";
		
		StringTokenizer st = new StringTokenizer(str,"%%");
		
		while(st.hasMoreTokens()) {
			System.out.println(st.nextToken());
		}
	}

}

출력값

this

is

my

string





import java.util.StringTokenizer;

public class JavaTestMain {

	public static void main(String[] args) {
		
		String str = "this%%is%%my%%string";
		
		StringTokenizer st = new StringTokenizer(str,"%%",true);
		
		while(st.hasMoreTokens()) {
			System.out.println(st.nextToken());
		}
	}

}

출력값

this

%

%

is

%

%

my

%

%

string

위와 같이 returnDeilms를 true로 하였을 경우 구획문자도 리턴한다.



import java.util.StringTokenizer;

public class JavaTestMain {

	public static void main(String[] args) {
		
		String str = "this%^is%^my%^string";
		
		StringTokenizer st = new StringTokenizer(str,"%^");
		
		System.out.println(st.nextToken());
		System.out.println(st.nextToken());
		System.out.println(st.nextToken("%"));
		System.out.println(st.nextToken());
	}
}

출력값

this

is

^my

^string