문자열이 특정 구분자(delimiter)로 연결되어 있을 경우, 구분자를 기준으로 부분 문자열을 분리하기 위해서는
String 의 split() 메소드를 이용하거나
java.util 패키지의 StringTokenizer 클래스를 이용할 수 있다.
split() 은 정규 표현식으로 구분하고, StringTokenizer 는 문자로 구분하는 차이점이 있다.
1. String 의 split() 메소드
split() 메소드는 아래와 같이 호출된다.
정규 표현식을 구분자로 해서 문자열을 분리한 후, 배열에 저장하고 리턴한다.
String[] result = “문자열”.split(“정규표현식”);
예) “홍길동&이수홍,박연수,김자바-최명호” 문자열이 있을 때,
&, 쉼표(,), - 를 제외하고 사람인 이름만 따로 뽑아내고 싶은 경우
아래와 같이 정규 표현식을 매개값으로 제공하면 된다.
String names = text.split(“&|,|-”);
예) StringSplitExample.java : 문자열 분리
public class StringSplitExample {
public static void main(String[] args) {
String text = “홍길동&이수홍,박연수,김자바-최명호”;
String[] names = text.split(“&|,|-”);
for(String name : names) { // 배열 객체 출력
System.out.println(name);
}
}
}
2. StringTokenizer 클래스
문자열이 한 종류의 구분자로 연결되어 있는 경우 사용하면 문자열(토큰 token)을 쉽게 분리할 수 있다.
StringTokenizer 객체를 생성 시 첫 번째 매개값으로 전체 문자열을 주고,
두 번째 매개값으로 구분자를 주면 된다.
StringTokenizer st = new StringTokenizer(“문자열”, “구분자”);
만약 구분자를 생략하면 공백(space)이 구분자가 된다.
예를 들어 “/”로 구분되어 있을 경우, 아래와 같이 StringTokenizer 객체를 생성할 수 있다.
String text = “홍길동/이수홍/박연수”;
StringTokenizer st = new StringTokenizer(text, “/”);
StringTokenizer 객체가 생성되면 부분 문자열을 분리해 낼 수 있는데,
아래 메소드를 이용해서 전체 토큰 수, 남아 있는 토큰 여부를 확인한 다음, 토큰을 읽으면 된다.
리턴 타입 |
메소드 |
설명 |
int |
countTokens() |
꺼니재 읺고 남아 있는 토큰의 수 |
boolean |
hasMoreTokens() |
남아 있는 토큰이 있는지 여부 |
String |
nextToken() |
토큰을 하나씩 꺼내옴 |
nextToken() 메소드로 토큰을 하나 꺼내오면 StringTokenizer 객체에는 해당 토큰이 없어진다.
만약 StringTokenizer 객체에서 더 이상 가져올 토큰이 없다면,
nextToken() 메소드는 java.util.NoSuchElementException 예외를 발생시킨다.
따라서 nextToken() 메소드를 사용하기 전에 hasMoreTokens() 메소드로 꺼내올 토큰이 있는지 조사한 후,
nextToken() 메소드를 호출하는 것이 좋다.
예) StringTokenizerExample.java
public class StringTokenizerExample {
public static void main(String[] args) {
String text = “홍길동/이수홍/박연수”;
// 방법 1. 전체 토큰 수를 얻어서 for 문으로 루핑
StringTokenizer st = new StringTokenizer(text, “/”);
int countTokens = st.countTokens(); // 전체 토큰 수
for(int i = 0; i < countTokens; i++) {
String token = st.nextToken();
System.out.println(token);
}
System.out.println();
// 방법 2. 남아 있는 토큰을 확인하고 while 문으로 루핑
st = new StringTokenizer(text, “/”);
while(st.hasMoreTokens()) {
String token = st.nextToken();
System.out.println(token);
}
}
}
'Java 기본 문법 - 참조 서적 [이것이 자바다 - 한빛미디어] > 9. 기본 API 클래스' 카테고리의 다른 글
10. Java 자바 [API] - 정규 표현식, Pattern 클래스 (0) | 2020.09.24 |
---|---|
9. Java 자바 [API] - StringBuffer, StringBuilder 클래스 (0) | 2020.09.24 |
7. Java 자바 [API]- String 클래스 (0) | 2020.09.24 |
6. Java 자바 [API] - Class 클래스 (0) | 2020.09.22 |
5. Java 자바 [API] - System 클래스 (0) | 2020.09.22 |