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