[긁어다 쓰는 샘플소스] StringTokeninzer 속성과 테스트 샘플 소스
개발자들이여!!!
개발소스등을 블로그등에 올릴 때에는 샘플 소스로 쉽게 사용할 수 있도록
드래그 금지를 풀어줍시다~!!!
※ 아래의 소스는 긁어다 마음껏 사용해도 됩니다!!
---------------------------------------------------------------------------
StringTokeninzer을 사용하고 있는 소스를 수정하는중에,
StringTokeninzer의 특성을 몰라서 많은 시간을 허비했다.
그리고, 어렴풋이 기억났읍니다.
오래전에 코딩으로만 밥빌어먹고 살때에 같은 이유로 많은 시간을 허비했던 아픈 기억..
결과부터 말하면,
StringTokeninzer에서 구분자(delimiter)로 나눌때,
구분자(delimiter)가 연이어 2개이상 나오는 경우에는 빈 String의 값을 만들지 않습니다.
즉,
"황, ,규"(첫번째와 두번째 delimiter사이에 1byte 스페이스값 존재)의 경우에는
배열사이즈 3개의 String[3] {"황"," ","규"}가 되고,
"황,,규" 의 경우에는 배열사이즈 2개의 String[2] {"황","규"}가 됩니다.
만약, "황,,규"의 문자열을 사용했을 때,
StringTokeninzer의 결과가 배열의 크기가 3으로 감안하여,
[0] "황" [1] "" [2] "규"으로 생각하고 코딩을 한다면,
아래와 같은 오류가 발생하게 될것입디니다.
C:\eGovFrame-2.6\bin\jdk1.7.0_21\bin>java StringTokeninzerTest [0] 황 [1] 규 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 at StringTokeninzerTest.main(StringTokeninzerTest.java:37) |
이런 StringTokeninzer의 특성을 잘 이해해서 섬세한 개발자가 되길 바랍니다~
import java.util.ArrayList; import java.util.StringTokenizer; public class StringTokeninzerTest { /** * StringTokeninzer을 테스트한다. * Tokenizing할 때, delimiter 사이에 String이 존재하지 않고, delimiter가 중복으로 나타날때 * Tokenizing 처리 결과를 확인한다. */ public static void main(String[] args) {
String[] delimitedStr = null; ArrayList list = new ArrayList(); String delimiter = ","; /* Test Case * (1) Case 1 : "황,상,규" => String[3] "황","상","규" * (2) Case 2 : "황, ,규" => String[3] "황"," ","규" * (3) Case 3 : "황,,규" => String[2] "황","규" */
String str = "황,,규";
StringTokenizer token = new StringTokenizer(str, delimiter);
while (token.hasMoreTokens()) { list.add(token.nextToken()); } delimitedStr = (String[])list.toArray(new String[list.size()]);
for (int i=0; i<delimitedStr.length; i++) { System.out.println("[" + i + "] " + delimitedStr[i]); } } } |
아래는 Case (1), (2), (3)을 순차적으로 테스트한 결과이다.