티스토리 뷰

주의 사항!

  • 이 글은 제가 직접 공부하는 중에 작성되고 있습니다.
  • 따라서 제가 이해하는 그대로의 내용이 포함됩니다.
  • 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다.


문자열이 특정 구분자(delimiter)로 연결되어 있을 경우, 구분자를 기준으로 부분 문자열을 분리하기 위해서는 String의 split() 메서드를 이용하거나, java.util 패키지의 StringTokenizer 클래스를 이용할 수 있습니다. split()은 정규 표현식으로 구분하고, StringTokenizer는 문자로 구분한다는 차이점이 있습니다.

 

1. split() 메서드

String 클래스의 split() 메서드는 다음과 같이 호출되는데, 정규 표현식을 구분자로 해서 문자열을 분리한 후, 배열에 저장하고 리턴합니다.

String[] result = "문자열".split("정규표현식");

예를 들어 다음과 같은 문자열이 있다고 가정해 보겠습니다. &, 쉼표(,), -를 제외하고 사람 이름인 "홍길동", "이순신", "유관순", "안중근", "윤봉길"만 따로 뽑아내고 싶은 경우,

홍길동&이순신,유관순,안중근-윤봉길

&, 쉼표(,), -를 파이프(|) 기호로 연결한 정규 표현식을 매개 값으로 제공하면 split() 메서드는 이 기호들을 구분자로 해서 부분 문자열을 추출합니다.

String[] result = text.split("&|,|-");
//Main.java
package Example;

public class Main {
	public static void main(String[] args) {
		String text = "홍길동&이순신,유관순,안중근-윤봉길";
		
		String[] names = text.split("&|,|-");
		
		for(String name : names) {
			System.out.println(name);
		}
	}
}

/*
실행결과

홍길동
이순신
유관순
안중근
윤봉길

*/

 

2. StringTokenizer 클래스

문자열이 한 종류의 구분자로 연결되어 있을 경우, StringTokenizer 클래스를 이용하면 손쉽게 문자열(토큰 : token)을 분리해 낼 수 있습니다. StringTokenizer 객체를 생성할 때 첫 번째 매개 값으로 전체 문자열을 주고, 두 번째 매개 값으로 구분자를 주면 됩니다.

StringTokenizer st = new StringTokenizer("문자열", "구분자");

만약 구분자를 생략하면 공백(space)이 기본 구분자가 됩니다. 

 

StringTokenizer 객체가 생성되면 부분 문자열을 분리해 낼 수 있는데, 다음 메서드들을 이용해서 전체 토큰 수, 남아 있는 토큰 여부를 확인한 다음, 토큰을 읽으면 됩니다.

리턴 타입 메서드 설명
int countTokens() 꺼내지 않고 남아 있는 토큰의 수
boolean hasMoreTokens() 남아 있는 토큰이 있는지 여부
String nextToken() 토큰을 하나씩 꺼내옴

nextToken() 메서드로 토큰을 하나 꺼내오면 StringTokenizer 객체에는 해당 토큰이 없어집니다. 만약 StringTokenizer 객체에서 더 이상 가져올 토큰이 없다면 nextToken() 메서드는 java.util.NoSuchElementException 예외를 발생시킵니다. 그래서 nextToken() 메서드를 사용하기 전에 hasMoreTokens() 메서드로 꺼내올 토큰이 있는지 조사한 후 nextToken 메서드를 호출하는 것이 좋은 코딩 방법입니다.

 

다음은 두 가지 방법으로 토큰을 추출하는 방법을 보여줍니다.

//Main.java
package Example;

import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) {
		String text = "홍길동/이순신/유관순";
		
		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();
		
		st = new StringTokenizer(text, "/");
		
		while(st.hasMoreTokens()) {
			String token = st.nextToken();
			System.out.println(token);
		}
	}
}

/*
실행결과

홍길동
이순신
유관순

홍길동
이순신
유관순

*/

'공부 일지 > JAVA 공부 일지' 카테고리의 다른 글

자바, 정규 표현식과 Pattern 클래스  (0) 2021.04.21
자바, StringBuffer, StringBuilder 클래스  (0) 2021.04.21
자바, String 클래스  (0) 2021.04.20
자바, Class 클래스  (0) 2021.04.20
자바, System 클래스  (0) 2021.04.20
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함