StringTokenizer 과 split 의 비교
보통 문자열을 쪼개서 사용을 할때 많이 사용하는 것이 StringTokenizer 입니다.
그런데 이넘이 가끔 바보같은짓을 할 경우가 발생을 하는데요..
1. StringTokenizer 로 문자 자르기
예를 들자면
1)
String str = "학교,집,회사,게임방"; 결과------------------- 문자1 : 학교 문자2 : 집 문자3 : 회사 문자4 : 게임방 ----------------------- 이렇게 잘 나옵니다. 2) 만약 중간에 문자하나가 없을 경우 String str = "학교,집,,게임방"; 결과------------------- 문자1 : 학교 문자2 : 집 문자3 : 게임방 ----------------------- 이렇게 나옵니다.
StringTokenizer tokens = new StringTokenizer( str, "," );를 사용 할 경우
for( int x = 1; tokens.hasMoreElements(); x++ ){
System.out.println( "문자" + x + " = " + tokens.nextToken() );
}
StringTokenizer tokens = new StringTokenizer( str, "," );를 사용 할 경우
for( int x = 1; tokens.hasMoreElements(); x++ ){
System.out.println( "문자" + x + " = " + tokens.nextToken() );
}
즉 4번째는 없어져 버리는것이죠.. 만약 제가 DB에 값을 저장한다고 한다면 테이블에 필드를 4개 만들었을 경우
(mem1, mem2, mem3, mem4 의 필드가 있다고 할께요)
1) 같은 경우에는
mem1 필드에는 학교
mem2 필드에는 집
mem3 필드에는 회사
mem4 필드에는 게임방
이렇게 저장이 되겠지만
2) 같은 경우에는
mem1 필드에는 학교
mem2 필드에는 집
mem3 필드에는 게임방 이렇게 저장이 됩니다..난리났네요..3번째 필드에는 null 이 들어가고 mem4 필드에 게임방이 들어가야하는데.. 이게 도대체 무슨경우이지요..그래서 sdk 1.4 버전에 뿅하고 나타난것이 sprit() 입니다. 2. split 로 문자 자르기 3) 2)번 예제와 같이 입력을 했을 경우 String str = "학교,집,,게임방"; }
결과------------------- 문자1 = 학교 문자2 = 집 문자3 = 문자4 = 게임방 ----------------------- 그렇군요..중간에 값이 없어도 잘 잘라줍니다. 그래서 DB에 저장을 한다면 mem1 필드에는 학교 mem2 필드에는 집 mem3 필드에는 null mem4 필드에는 게임방 이렇게 결과값이 나와 저장을 할수가 있습니다. 즉, 구분자를 기준으로 데이터가 없는 부분도 그 결과를 반환해주지요. 그렇지만 StringTokenizer는 구분자로 문자열간 구분이 되어 있더라도 구분자와 구분자 사이에 데이터가 존재하지 않으면 해당 데이터는 무시를 하고 실제 값이 존재하는 부분만 값을 반환합니다. 4) 만약 맨뒤에 값이 없을 경우 결과가 어떻게 나올까요?? String str = "학교,집,회사,"; }
결과------------------- 문자1 = 학교 문자2 = 집 문자3 = 회사 ----------------------- 이렇게 나옵니다. StringTokenizer 를 사용해도 마찬가지의 결과가 나타납니다. 그래서 DB에 저장을 한다고 해도 mem1 필드에는 학교 mem2 필드에는 집 mem3 필드에는 회사 이렇게 저장이 되므로 쓸모없게 되버리지요..그렇다면 해결방법은 과연 없을까요?? 해결방법은 당연히 split 에 있습니다. 한번쯤 API를 자세히 살펴보면 split() 메소드는 2가지의 방식이 있습니다. 하나는 하나는 split( String regex )이고 즉 split( String regex, int limit ) 를 이용하여 마찬가지로 쪼갤 수가 있는데 int limit 에 String.split( String regex, int limit )를 사용해서 쪼개보겠습니다. 5) split(",", 4) 를 이용하여 쪼개보기 String str = "학교,집,회사,"; }
결과------------------- 문자1 = 학교 문자2 = 집 문자3 = 회사 문자4 = ----------------------- split("," , 4) 이렇게 한다면 4개의 공간을 지정을 해준다는 뜻입니다. 즉 학교,집,회사, 를 쪼갤경우 mem1 = 학교 mem2 = 집 mem3 = 회사 mem4 = null 로 저장을 할 수 있습니다. 하지만 이건 어디까지나 고정적으로 구분이 될 경우 입니다. 가변적으로 몇개의 데이터가 들어올지 모르는 상황에서는 결국 필요없게 되는 문제가 아직도 발생을 하게 되지요. 가변적일때는 결국 방법이 없으므로 언제나 상황을 종합하여 값을 받아와 구분을 해야겠습니다. 마지막으로 slpit("," , 2) 로 할 경우 어떻게 될까요? mem1 = 학교 mem2 = 집 이렇게 2개까지만 저장을 할 수 있습니다.
String[] values = str.split(",");
for( int x = 0; x < values.length; x++ ){
System.out.println( "문자" + (x+1) + " = " + values[x] );
결과와 같이 split()을 이용한 경우에는 비록 값이 존재하지 않더라고 해당 데이터가 없다는 것을 확실하게 판단을 할 수 있습니다.
String[] values = str.split(",");
for( int x = 0; x < values.length; x++ ){
System.out.println( "문자" + (x+1) + " = " + values[x] );
다는 하나는 split( String regex, int limit )입니다.
String[] values = str.split(",");
for( int x = 0; x < values.length; x++ ){
System.out.println( "문자" + (x+1) + " = " + values[x] );
'Projects > 일반론' 카테고리의 다른 글
split("\.") - invalid escape sequence (0) | 2010.01.04 |
---|---|
Code Conventions for the JavaTM Programming Language (0) | 2010.01.04 |
HashMap과 HashTable의 차이 (0) | 2009.12.30 |