Java에서 문자열을 자르는데 사용되는 메소드는 StringTokenizer 와 split 두 가지가 있다.
StringTokenizer 로 문자 자르기
예를 들어 다음과 같은 코드가 있다.
String str = "학교,집,회사,게임방";
StringTokenizer tokens = new StringTokenizer( str, "," );
for( int x = 1; tokens.hasMoreElements(); x++ ){
System.out.println( "문자" + x + " = " + tokens.nextToken() );
}
결과값은 다음과 같이 나온다.
문자1 : 학교
문자2 : 집
문자3 : 회사
문자4 : 게임방
하지만 중간에 문자가 비었을 경우에 문제가 발생한다.
예를 들어 다음과 같은 코드가 있다.
String str = "학교,집,,게임방";
StringTokenizer tokens = new StringTokenizer( str, "," );를 사용 할 경우
for( int x = 1; tokens.hasMoreElements(); x++ ){
System.out.println( "문자" + x + " = " + tokens.nextToken() );
}
결과값은 다음과 같다.
문자1 : 학교
문자2 : 집
문자3 : 게임방
위처럼 중간에 비어있는 문자를 null로 처리하는 것이 아니라 그냥 생략해버린다.
split 로 문자 자르기
이를 위해 sdk 1.4 버전에서 split() 메소드가 제공된다.
위와 같은 중간에 문자가 비어있는 문자열을 split()를 사용해 자르면 다음과 같다.
String str = "학교,집,,게임방";
String[] values = str.split(",");
for( int x = 0; x < values.length; x++ ){
System.out.println( "문자" + (x+1) + " = " + values[x] );
}
결과값은 다음과 같다.
문자1 = 학교
문자2 = 집
문자3 =
문자4 = 게임방
위와 같이 중간에 값이 없다면 null로 처리되서 나온다.
즉, DB에 저장될때도 생략이 아닌 null로 값이 처리가 된다.
StringTokenizer()와 split() 비교
결과와 같이 split()을 이용한 경우에는 비록 값이 존재하지 않더라고 해당 데이터가 없다는 것을
확실하게 판단을 할 수 있다. 구분자를 기준으로 데이터가 없는 부분도 그 결과를 반환해준다.
그렇지만 StringTokenizer는 구분자로 문자열간 구분이 되어 있더라도 구분자와 구분자 사이에 데이터가
존재하지 않으면 해당 데이터는 무시를 하고 실제 값이 존재하는 부분만 값을 반환한다.
만약 중간이 아닌 맨 마지막 문자가 비었을 경우는?
예를 들어 다음과 같은 코드가 있다.
String str = "학교,집,회사,";
String[] values = str.split(",");
for( int x = 0; x < values.length; x++ ){
System.out.println( "문자" + (x+1) + " = " + values[x] );
}
결과값은 다음과 같다.
문자1 = 학교
문자2 = 집
문자3 = 회사
이 경우엔 StringTokenizer 를 사용해도 마찬가지의 결과가 나타난다.
그래서 DB에 저장될 때도 위와 같이 세개의 값만 저장이 된다.
그렇다면 마지막 문자를 null로 하고 네 개의 값을 저장하는 방법은 없을까?
해결방법은 split 에 있다.
API를 자세히 살펴보면 split() 메소드는 2가지의 방식이 있습니다.
하나는 split( String regex )이고 다른 하나는 split( String regex, int limit )이다.
split( String regex, int limit ) 를 이용하여 문자열을 잘라보면 다음과 같다.
split(",", 4) 를 이용하여 문자열 자르기
String str = "학교,집,회사,";
String[] values = str.split(",");
for( int x = 0; x < values.length; x++ ){
System.out.println( "문자" + (x+1) + " = " + values[x] );
}
결과값
문자1 = 학교
문자2 = 집
문자3 = 회사
문자4 =
split("," , 4) 이렇게 한다면 4개의 공간을 지정을 해준다는 뜻이다.
즉 학교,집,회사, 를 쪼개서 DB에 저장한다면 다음과 같이 저장이 된다.
mem1 = 학교
mem2 = 집
mem3 = 회사
mem4 = null
만약 split(",", 2)로 할 경우 어떻게 될까?
mem1 = 학교
mem2 = 집
위와 같이 2개까지만 DB에 저장이 된다.
하지만 이건 어디까지나 고정적으로 구분이 될 경우이다.
가변적으로 몇개의 데이터가 들어올지 모르는 상황에서는 결국 필요없게 되는 문제가 아직도 발생을 하게 된다.
가변적일때는 결국 방법이 없으므로 언제나 상황을 종합하여 값을 받아와 구분을 해야한다.
※ 출처 : http://blog.naver.com/PostView.nhn?blogId=co_ke1213&logNo=150023610555&redirect=Dlog&widgetTypeCall=true
[출처] StringTokenizer() 과 split() 문자 자르기 비교|작성자 와니
'Programming > Java & JSP & Spring' 카테고리의 다른 글
[Java] 스트링 비교 (equals와 ==의 차이) (0) | 2017.07.05 |
---|---|
Spring Boot(스프링부트)를 왜 사용해야 하는가? (0) | 2017.07.05 |
[Java] String 클래스에서 특수문자 인식 (1) | 2017.03.24 |
[Java] 문자열 포함 여부 확인 방법 (contains/ indexOf/ matches) (0) | 2017.03.23 |
[JSP] JSTL FOR구문 (c:forEach, c:forToken) (0) | 2017.03.23 |