[프로그래머스/181868] 공백으로 구분하기2
in Study / Coding Test
☑️ 문제
☑️ 풀이
첫 번째 풀이
//시간: 0.20ms
//메모리: 81.7MB
import java.util.*;
class Solution {
public String[] solution(String my_string) {
String[] arr = my_string.split(" ");
List<String> list = new ArrayList<>();
for (String str : arr) {
if (!str.equals("")) {
list.add(str);
}
}
String[] answer = new String[list.size()];
for (int i = 0; i < list.size(); i++) {
answer[i] = list.get(i);
}
return answer;
}
}
- 먼저
my_string
을“ “(공백)
으로 잘라 배열을 생성한다. - 그 뒤, 배열에 공백을 제외한 원소만 다시 리턴한다.
두 번째 풀이
//시간: 0.36ms
//메모리: 82.5MB
import java.util.*;
class Solution {
public String[] solution(String my_string) {
StringTokenizer st = new StringTokenizer(my_string);
String[] answer = new String[st.countTokens()];
int idx = 0;
while (st.hasMoreTokens()) {
answer[idx++] = st.nextToken();
}
return answer;
}
}
Tokenizer
를 사용하여 한 개 이상의 공백으로 구분되어 있는 문자열을 분리할 수 있었다.
☑️ 문법 정리 - StringTokenizer
StringTokenizer?
java.util
패키지에 속하는 클래스이다.- 구분자를 기준으로 문자열을 나누어 토큰(token) 단위로 처리한다.
split()
과 유사하지만split()
은 배열을 반환하는 반면,StringTokenizer
는 토큰을 하나씩 순차적으로 처리할 수 있다.
StringTokenizer 생성자
기본 생성자
StringTokenizer st = new StringTokenizer(String str);
- 공백을 기준으로 문자열을 나눈다.
구분자를 지정하는 생성자
StringTokenizer st = new StringTokenizer(String str, String delimiter);
delimiter
에 지정된 문자를 기준으로 문자열을 나눈다.
구분자를 토큰에 포함할 지 여부를 지정하는 생성자
StringTokenizer st = new StringTokenizer(String str, String delimiter, boolean returnDelims);
returnDelims
가true
이면 구분자도 토큰으로 포함된다.
주요 메서드
메서드 | 설명 |
---|---|
boolean hasMoreTokens() | 남아 있는 토큰이 있는 지 확인한다. (있으면 true 리턴) |
String nextToken() | 다음 토큰을 반환한다. |
String nextToken(String delim) | 새 구분자를 지정하고, 다음 토큰을 반환한다. |
int countTokens() | 남아 있는 토큰 개수를 반환한다. |
예제
기본 사용 (공백 기준)
import java.util.StringTokenizer;
public class StringTokenizerExample {
public static void main(String[] args) {
String str = "Java is fun to learn";
StringTokenizer st = new StringTokenizer(str);
while (st.hasMoreTokens()) {
System.out.println(st.nextToken));
}
}
}
**// 출력**
// Java
// is
// fun
// to
// learn
특정 구분자 사용(, 기준)
import java.util.StringTokenizer;
public class StringTokenizerExample {
public static void main(String[] args) {
String str = "apple,banana,grape,orange";
StringTokenizer st = new StringTokenizer(str, ",");
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
}
}
// 출력
// apple
// banana
// grape
// orange
구분자도 포함하기 (returnDelims = true)
import java.util.StringTokenizer;
public class StringTokenizerExample {
public static void main(String[] args) {
String str = "Hello,World!";
StringTokenizer st = new StringTokenizer(str, ",", true);
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
}
}
// 출력
// Hello
// ,
// World
// !
언제 StringTokenizer를 사용해야 할까?
- 순차적으로 토큰을 처리할 때는
StringTokenizer
를, 배열을 한 번에 얻고 싶을 때는split()
이 유용하다. StringTokenizer
는 메모리 사용량을 줄이고자 할 때 유용하다.