문자열이 특정 구분자(delimiter)로 연결되어 있을 경우, 구분자를 기준으로 부분 문자열을 분리하기 위해서는 다음 두가지 방법이 있다.
-
String의 split() 메소드 이용
-
java.util 패키지의 StringTokenizer 클래스 이용
① split() 메소드 사용법
String 클래스의 split() 메소드는 다음과 같이 호출되는데, 정규 표현식을 구분자로 해서 문자열을 분리한 후, 배열에 저장하고 리턴한다.
String[] result = "문자열".split("정규표현식");
다음과 같은 문자열 중 &, 쉼표(,) , - 를 제외하고 사람 이름만 따로 뽑아내고 싶을 경우,
홍길동&이수홍,박연수,김자바-최명호
&, 쉼표(,), -를 파이프(|) 기호로 연결한 정규 표현식을 매개값으로 제공하면 split() 메소드는 이 기호들을 구분자로 해서 부분 문자열을 추출한다.
String[] names = text.split("&|,|,-");
② StringTokenizer 클래스 사용법
문자열이 한 종류의 구분자로 연결되어 있을 경우, StringTokenizer 클래스를 사용하면 손쉽게 문자열을 분리해 낼 수 있다.
StringTokenizer 객체를 생성할 때 첫 번째 매개값으로 전체 문자열을 주고, 두 번째 매개값으로 구분자를 주면 된다.
StringTokenizer st = new StringTokenizer("문자열", "구분자");
만약 구분자를 생략하면 공백이 기본 구분자가 된다. 예를 들어 문자열이 "/"로 구분되어 있을 경우, 다음과 같이 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() 메소드를 호출하는 것이 좋은 코딩 방법이다.
import java.util.StringTokenizer;
public class StringTokenizerExample {
public static void main(String[] args) {
String text = "홍길동/이수홍/박연수";
//남아 있는 토큰을 확인하고 while 문으로 루핑
StringTokenizer st = new StringTokenizer(text, "/");
while (st.hasMoreTokens()) {
String token = st.nextToken();
}
}
}
'Java' 카테고리의 다른 글
[Java] StringBuffer, StringBuilder 클래스 (0) | 2021.02.28 |
---|---|
상대방의 소스를 받았는데 한글이 깨지는 경우 (Encoding 깨짐 현상) (0) | 2021.02.20 |
[Java] BufferedInputStream 와 BufferedReader (0) | 2021.01.23 |
문자열 비교가 안되는 경우 해결 방법 (==, equals 이용) (0) | 2020.11.24 |
이클립스 성능개선 및 Validation 최적화 설정 (0) | 2020.11.24 |