본문 바로가기

Language/Java / JSP

[Java] 문자열 나누기(분리하기) - StringTokenizer, split

반응형

다음과 같은 특정 규칙으로 정의된 문자열이 있다고 가정하자.

"홍길동,28,남자,서울 강남구"

해당 문자열을 구분자로 구분하여 나누는 방법으로는 몇가지가 있는데 오늘은 StringTokenizer 와 split을 이용해 보겠다

StringTokenizer는 특정 구분자를 기준으로 token 단위로 끊어서 읽을수 있게 해준다.
split의 경우 구분자를 기준으로 문자열을 분리하여 배열로 리턴한다.


import java.util.StringTokenizer;

public class StringTokenTest {

	public static void main(String[] args) {
		
		
		// 이름,나이,성별,지역
		String txt = "홍길동,28,남자,서울 강남구" ;
		
		
		// StringTokenizer를 이용한 문자열 분리
		StringTokenizer tokens = new StringTokenizer(txt);
		
		String sName 	= tokens.nextToken(",") ;	// 이름
		String sAge 	= tokens.nextToken(",") ;	// 나이
		String sSex 	= tokens.nextToken(",") ;	// 성별
		String sLoc 	= tokens.nextToken(",") ;	// 지역
		
		System.out.println("[StringTokenizer 이용]") ;
		System.out.println(sName) ;
		System.out.println(sAge) ;
		System.out.println(sSex) ;
		System.out.println(sLoc) ;
		
		System.out.println("") ;
		
		
		
		// split을 이용한 문자열 분리
		String[] txtArr = txt.split(",") ;
		
		System.out.println("[split 이용]") ;
		for(int i=0; i < txtArr.length; i++){
			System.out.println(txtArr[i]) ;
		}
		
		
	}
}



사용방법은 둘다 간단하지만 특히 split을 이용한 방법이 코드도 짧고 꽤 간단하다.
하지만 상황에 맞게 StringTokenizer 과 split을 구분하여 사용하는게 좋다.

StringTokenizer는 "남자,,서울 강남구" 처럼 null값이 있을경우 null을 무시해 버린다.

즉 실제 출력은 "남자, 서울 강남구"가 되버린다. 이 경우는 구분자 앞뒤로 공백을 주어 토큰을 trim 처리해서 공백을 지워버리면 되지만, split은 null 이 있을경우에도 무시하지 않으므로 차라리 해당 문자열이 적을경우 split을 이용하는게 편하다.

또다른 상황으로 나 같은 경우 StringTokenizer을 사용하는곳은 CSV형식의 파일을 읽어서 뭔가를 처리해야 할때 인데, 이때 CSV 파일의 용량이 상당히 크다.


해당 작업을 split으로 처리하면 처리속도가 굉장히 떨어져 비효율적인 문제가 발생하였다. 


무엇이 좋다고는 할수없다. 각각의 상황에 맞게 적절한것을 사용하자 !