본문 바로가기
Algorithm

StringTokenizer vs Split

코동이 2020. 7. 7.

StringTokenizer

String StringTokenizer(String str) white space, new line, tab 등을 기준으로 token을 나눈다.
String StringTokenizer(String str, String delim) delim을 기준으로 token을 나눈다.
String StringTokenizer(String str, String delim, boolean flag) flag가 true이면 delim도 token으로 포함해서 나눈다.
flag가 false이면 delim은 token으로 포함하지 않는다.
(default)

 

boolean hasMoreTokens() token이 더 있는지 확인
boolean nextToken() 다음 token 반환
Object hasMoreElements() token이 더 있는지 확인 (반환 Object)
Object nextElement() 다음 token 반환 (반환 Object)
int countToken() 남아있는 token 수

 

Split

public String[] split(String regex) regex를 기준으로 String[]을 반환
public String[] split(String regex, int limit) limit>0이면, String[]의 갯수가 limit에 제한된다.
limit=0이면, 빈 공백은 배열에 포함되지 않는다.(default)
limit<0이면, 빈 공백도 배열에 포함시킨다. 

 

"boo:and:foo"
Regex Limit Result
: 2 { "boo", "and:foo" }
: 5 { "boo", "and", "foo" }
: -2 { "boo", "and", "foo" }
o 5 { "b", "", ":and:f", "", "" }
o -2 { "b", "", ":and:f", "", "" }
o 0 { "b", "", ":and:f" }

  o를 기준으로 왼쪽과 오른쪽을 분리하는데, limit<0은 빈 공백도 배열에 포함시키는데, 이 때 오른쪽 문자열이 공백일 때 포함시킨다. 왼쪽은 공백 시 무조건 ""이 남아야 한다. 따라서 오른쪽에 남는 문자열에 대해서만 limit<0 인지 limit=0에 따라서 달라진다.

 

 

백준 7785 회사에 있는 사람

import java.util.*;
import java.io.*;

public class Main {

	public static void main(String[] args) throws IOException {
		Scanner sc = new Scanner(System.in);
		String line = sc.nextLine();
		StringTokenizer st = new StringTokenizer(line);
		
		//1번
		System.out.println(st.countTokens());
		
		//2번
		int num=0;
		while(st.hasMoreTokens()) {
			String a = st.nextToken();
			num++;
		}
		System.out.println(num);
		
		//3번
		String[] array = line.trim().split(" ");
		if(line.isEmpty()) {
			System.out.println(0);
		} else {
			System.out.println(array.length);
		}
	}
}

 

[풀이방법 1]

StringTokenizer의 countTokens()를 통해 바로 토큰의 개수를 구할 수 있다.

 

[풀이방법2]

StringTokenizer의 hasMoreTokens()를 통해 토큰의 존재여부를 확인하고 nextToken()을 통해 토큰을 확인하다. while문 안에 hasMoreTokens()는 nextToken()으로 토큰을 사용하여야 다음 토큰을 확인한다.

 

[풀이방법3]

split을 이용한다. trim()을 통해 문자열의 앞 뒤 공백을 제거한다. " "의 문자열이 입력되면 split은 " "하나를 생성하여 숫자를 카운트 하기 때문에 isEmpty()를 통해 검사한다.

 

 

 

반응형

'Algorithm' 카테고리의 다른 글

백준 11720 / 숫자의 합  (0) 2020.07.09
백준 10989 / 수 정렬하기 3  (0) 2020.07.09
백준 11652 / 카드  (0) 2020.07.09
백준 10814 / 나이순 정렬  (0) 2020.07.09
백준 11650 / 좌표 정렬하기  (0) 2020.07.09