http://fruitdev.tistory.com/55
다음과 같은 특정 규칙으로 정의된 문자열이 있다고 가정하자.
"홍길동,28,남자,서울 강남구"
해당 문자열을 구분자로 구분하여 나누는 방법으로는 몇가지가 있는데 오늘은 StringTokenizer 와 split을 이용해 보겠다
StringTokenizer는 특정 구분자를 기준으로 token 단위로 끊어서 읽을수 있게 해준다.
split의 경우 구분자를 기준으로 문자열을 분리하여 배열로 리턴한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | 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으로 처리하면 처리속도가 굉장히 떨어져 비효율적인 문제가 발생하였다.
무엇이 좋다고는 할수없다. 각각의 상황에 맞게 적절한것을 사용하자 !
===============================================================================
자바 스트링 토크나이저(JAVA StringTokenizer)에 관한 글입니다.
StringTokenizer 클래스를 이용해서 추출하기 위해서는 문자열을 StringTokenizer 객체를 사용하여 생성해야합니다.
StringTokenizer st = new StringTokenizer("이 준 빈 은 호 박 머 리");
객체를 생성 후 nextToken 이라는 메소드를 사용하여 토큰을 추출해 낼 수 있습니다.
기본적으로 공백 문자가 구획문자로 사용됩니다
(space character , tab character ,newline character , carriage-return, form-feed)
소스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import java.util.StringTokenizer; public class h5bak_StringTokenizer { public static void main(String[] args) { StringTokenizer st = new StringTokenizer( "이 준 빈 은 호 박 머 리" ); while (st.hasMoreTokens()){ //토근이 있는동안 while문이 실행됨 String temp = st.nextToken(); // 토근을 temp 변수에 저장 System.out.println( "temp=" +temp); } System.out.println( "==================================" ); // StringTokenizer(str, delim) str= 추출할문자 , delim =구획문자 StringTokenizer st1 = new StringTokenizer( "이|준|빈|은|호|박|머|리" , "|" ); while (st1.hasMoreTokens()){ String temp = st1.nextToken(); if (st1.equals( "|" )){ System.out.println( "\n" ); } else { System.out.println(temp); } } } } |
실행결과
'언어 > JAVA' 카테고리의 다른 글
System.in.read() 표준입출력, (0) | 2016.11.25 |
---|---|
[JAVA] 정규표현식, Matcher 메서드 사용방법과 그룹 개념이해 (0) | 2016.11.25 |
[JAVA] (조금 더 정확한)실행시간 확인, 측정하기(timer) (0) | 2016.11.18 |
java 디자인패턴 (0) | 2016.11.11 |
JAVA - ArrayList에서 배열로, 배열에서 ArrayList로 (0) | 2016.11.08 |
댓글