본문 바로가기

Language/Java

[Java] StringTokenizer와 split()의 차이점

StringTokenizer와 split() 전부 문자열을 구분하는데, 뭐가 다른 거지?

자바에서 문자열을 구분자로 분리하고 싶을 때는 StringTokenizer, split()을 사용하고 있으며,

같으면서도 일부분 차이가 있기 때문에 개념을 파악하고 쓰는 게 좋을 것 같다는 생각이 들었다.

 

StringTokenizer

  • java.util에 포함되어 있는 메서드이며, 구분자를 지정하여 문자열로 나누고 생략하면 공백이 기본 구분 자이다.
  • split처럼 여러개의 구분자가 아닌 지정한 한 가지의 구분자로만 사용할 수 있다.
  • countTokens() : 남아있는 토큰 수 int 반환
  • hasMoreTokens() : 토큰이 남아있는지의 여부 true, flase로 반환
  • nextToken() : 토큰 String 반환

split()

  • String 클래스의 메서드이며, 구분자를 지정하여 문자열로 나눠 배열에 저장하고 공백도 문자열에 포함된다.
  • | 를 사용하여 여러개의 구분자를 정하여 사용할 수 있다.

간단하게 예시 코드로 어떤식으로 출력되는지 파악하는 것이 이해하기 쉽다.

 

★ 콤마(,) 기준으로 StringTokenizer, split() 사용한 코드 예시 ★

public class StringTest{
	public static void main(Stirng[] args){
    	String str = "one,two,three";
        
       	stringTokenizerTest(str);
        splitTest(str);
    }
    
    public static void stringTokenizerTest(String str){
    	StringTokenizer st = new StringTokenizer(str, ",");
        
        for(int i = 0; tokenizer.hasMoreTokens(); i++){
            System.out.println(i + "." + tokenizer.nextToken());
        }
    }
    
    public static void splitTest(String str){
    	String split[] = str.split(",");
        
        for(int i = 0; str.split.length; i++){
            System.out.println(i + "." + split[i]);
        }
    }
}

 

1. String str = "one,two,three"; [위 코드와 동일]

  • StringTokenizer 출력 : 0번째 one, 1번째 two, 2번째 three
  • split 출력 : 0번째 one, 1번째 two, 2번째 three

2. String str = "one,two,,three"; [구분자 사이에 데이터가 없을 경우]

  • StringTokenizer 출력 : 0번째 one, 1번째 two, 2번째 three
  • split 출력 : 0번째 one, 1번째 two, 2번째  (공백), 3번째 three

3. String str = "one,two,three,"; [구분자가 마지막에 끝날 경우]

  • StringTokenizer 출력 : 0번째 one, 1번째 two, 2번째 three
  • split 출력 : 0번째 one, 1번째 two, 2번째 three

 

 

※ 둘 중 어떤 것을 사용하는 것이 좋은지에 대해서는 추후 업데이트 할 예정