Language/JAVA

StringTokenizer 클래스

자바걸 2023. 7. 7. 12:09

문자열이 특정 구분자로 연결되어 있을 경우에는 구분자를 기준으로 부분 문자열을 분리할 수 있다.
분리할 때에는 String의 split()메소드를 이용하거나, java.util패키지의 StringTokenizer 클래스를 이용할 수 있다. 

차이점은, 
spilt()  : 정규표현식으로 분리
StringTokenizer : 문자로 분리
한다는 것이다.


● split()

split()메소드는 &, 쉼표(,), -를 파이프(|)기호로 연결한 정규표현식으로 매개값을 제공하면 기호들을 구분자로 부분 문자열을 추출해준다. 바로 코드로 적용해보겠다. 

public class StringSplitEx {
	public static void main(String[] args) {
    	String text = "자바&스프링,자바스크립트,SQL-ORACLE";
        
        String[] names = text.split("&|,|-");
        
        for(String name:names) {
        	System.out.println(name);
        }
    }
}

------결과-------
자바
스프링
자바스크립트
SQL
ORACLE

 

 


● StringTokenizer 클래스

문자열이 한 종류의 구분자로 연결되어 있을경우,  StringTokenizer 클래스를 사용하면 손쉽게 문자열을 구분해낼 수 있다.  StringTokenizer 객체를 생성할 대 첫 번째 매개값으로 전체 문자열을 주고, 두 번째 매개값으로 구분자를 주면 된다.
( 문자열 = token)

 StringTokenizer st = new  StringTokenizer("전체문자열","구분자");


만약, 구분자를 생략하면 공백(space)가 기본 구분자가 된다. 

String text = "열심히/하자/개발공부";
 StringTokenizer st = new  StringTokenize(text,"/");

이렇게 사용하면 된다.

그리고, 다음 메소드들을 이용해서 전체토큰수, 남아있는 토큰 여부를 확인해서 다음 토큰을 읽을 수 있다.

메소드 설명
int countTokens() 꺼내지 않고 남아 있는 토큰 수
boolean hasMoreTokens() 남아 있는 토큰이 있는지 여부
String nextToken() 토큰을 하나씩 꺼내옴

nextToken()으로 토큰을 하나씩 꺼내오면  StringTokenizer 객체에는 해당 토큰이 없어진다. 만약 더이상 가져올 토큰이 없다면 nextToken()메소드는 java.util.NoSuchElementException 예외를 발생시키기 때문에 nextToken()메소드를 사용하기 전에 hasMoreTokens() 메소드로 일단 꺼내올 토큰이 있는지부터 확인한 후 nextToken()메소드를 호출하는 것이 좋은 코딩방법이다.   

자바 책에서는  StringTokenizer 로 토큰을 분리하는 예제를 두 가지로 설명하는데,
첫 번째 방법은 countTokens()메소드로 for문으로루핑하여  남아있는 토큰을 확인하는 방법,
두 번째 방법은 위에서 말한것 처럼 hasMoreTokens()메소드를 조건으로 while문을 루핑하여 남은 토큰을 확인하는 방법을 보여준다. 따로 코드는 적지 않았다.