자바에서는 구분자를 기준으로 문자열을 자를 때 StringTokenizer 클래스와 split() 메소드를 사용할 수 있다.
1. StringTokenizer 클래스
- java.util에 포함된 클래스이므로 객체를 생성해 사용
- 구분자를 생략하면 공백이 기본 구분자
- 문자 또는 문자열로 문자열을 구분
- 공백은 무시됨(생략)
- 장점 : 속도가 빠르다
- 단점 : 정규표현식 사용 불가, 원패턴
+) 정규 표현식이란?
특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어
⁕ StringTokenizer 사용법
생성자 | 설명 |
public StringTokenizer(String str); | 전달된 매개변수 str을 공백을 기준으로 문자열을 분리 |
public StringTokenizer(String str,String delim); | 매개변수로 전달된 delim을 기준으로 str 문자열을 분리 |
public StringTokenizer(String str, String delim,boolean returnDelims); |
문자열 str을 delim을 기준으로 분리하는데 마지막 매개변수를 통해 delim(구분자)까지 포함해 분리할지 아닐지를 결정 |
메소드 | 설명 |
int countTokens() | 남아 있는 토큰의 개수를 반환 |
boolean hasMoreTokens() | 리턴할 다음 토큰이 남아있으면 true 없으면 false를 반환 |
String nextToken() | 다음 토큰을 반환(반환이므로 이전 토큰 제거됨) |
** java.util에 포함된 클래스이므로 꼭 import java.util.StringTokenizer 해서 사용해야 한다.
⁕ public StringTokenizer(String str,String delim); 사용 예제
String txt = "서울/부산/대구/인천/광주/대전/울산";
StringTokenizer tokens = new StringTokenizer(txt, "/"); // /를 구분자로 하여 문자열을 분리
while(tokens.hasMoreTokens())
System.out.print(tokens.nextToken() + " ");
결과
서울 부산 대구 인천 광주 대전 울산
⁕ 공백 무시되는 사용 예제
String txt = "강아지,고양이,,병아리,송아지";
StringTokenizer tokens = new StringTokenizer(txt, ",");
while(tokens.hasMoreTokens())
System.out.println("return: " + tokens.nextToken());
결과
return : 강아지
return : 고양이
return : 병아리
return : 송아지
⇒ 공백이 무시/생략된 채로 반환된다.
2. split() 메소드
- String 클래스의 메소드로 객체 생성 없이 사용 가능
- 지정한 구분자로 문자열을 나눠 배열에 저장
- 정규표현식으로 문자열을 구분
- 공백 문자열도 포함(null로 처리)
- 장점 : 정규 표현식 사용 가능(다양하게 분리)
- 단점 : 속도가 느리다
⁕ split() 사용법
구문 | 설명 |
String[] split(String separator) | separator를 기준으로 문자열 분리 |
split(String separator, int limit) | separator를 기준으로 문자열을 limit 만큼만 분리 |
⁕ 일반적인 구분자로 분리 사용 예제 : String[] split(String separator)
String txt = "서울/부산/대구/인천/광주/대전/울산";
String tokens[] = txt.split("/");
for ( String x : tokens )
System.out.print( x + " " );
결과
서울 부산 대구 인천 광주 대전 울산
⁕ 메타 문자 구분자로 분리 사용 예제
String txt = "서울.부산.대구.인천.광주.대전.울산";
String tokens[] = txt.split("\\."); // 이스케이프 문자인 "∖∖"를 앞에 붙여줘야 됨
for ( String x : tokens )
System.out.print( x + " " );
결과
서울 부산 대구 인천 광주 대전 울산
⁕ 여러가지 구분자로 분리 사용 예제
String txt = "서울@부산/대구#인천/광주@대전#울산";
String tokens[] = txt.split("/@#");
for ( String x : tokens )
System.out.print( x + " " );
결과
서울 부산 대구 인천 광주 대전 울산
⁕ 공백이 포함되는 사용 예제
String txt = "강아지,고양이,,병아리,송아지";
String tokens[] = txt.split(",");
for ( String x : tokens )
System.out.println( "return : " + x );
결과
return : 강아지
return : 고양이
return :
return : 병아리
return : 송아지
⁕ 매개변수 limit 사용 예제 ① split(String regex, 0)
String txt = "귤@수박@포도@복숭아@@@";
String tokens[] = txt.split("@", 0 );
for ( String x : tokens )
System.out.println( "return : " + x );
결과
return : 귤
return : 수박
return : 포도
return : 복숭아
⇒ 맨 뒤의 값들이 빈 문자열일 경우 무시한다
⇒ split(String regex, 0) = split(String regex)
⁕ 매개변수 limit 사용 예제 ② split(String regex, 2) // 구분자 총 수보다 작은 경우
String txt = "귤@수박@포도@복숭아@@@";
String tokens[] = txt.split("@", 2);
for ( String x : tokens )
System.out.println( "return : " + x );
결과
return : 귤
return : 수박@포도@복숭아@@@
⇒ limit으로 들어온 2만큼만 분리하고 더 이상의 연산 없이 그냥 배열에 저장
⁕ 매개변수 limit 사용 예제 ③ split(String regex, -1)
String txt = "귤@수박@포도@복숭아@@@";
String tokens[] = txt.split("@", -1);
for ( String x : tokens )
System.out.println( "return : " + x );
결과
return : 귤
return : 수박
return : 포도
return : 복숭아
return :
return :
return :
⇒ 맨 뒤에 값들이 빈 문자열이어도 다 null 처리해서 배열에 저장한다.