Programming/Java

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

궁극의 java개발자 2015. 12. 16. 10:00
반응형

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

"홍길동,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으로 처리하면 처리속도가 굉장히 떨어져 비효율적인 문제가 발생하였다.

반응형