문제
내가 작성한 정답
import java.util.*;
class Solution {
public String[] solution(String my_string) {
List<String> answer = new ArrayList<>();
for(String s:my_string.split(" ")){
if(!s.equals("")) answer.add(s);
}
return answer.toArray(String[]::new);
}
}다른 사람들의 정답
1. split("[ ]+")는 스페이스 문자만 처리함
2. split("\\s+")는 모든 종류 공백 문자 처리, 가장 범용적
3. StringTokenizer는 연속된 공백을 하나로 처리하며 빈 문자열 토큰은 없음, 빠름
// 1. 정규식 "[ ]+"를 이용한 split
class Solution {
public String[] solution(String my_string) {
// trim()으로 앞뒤 공백 제거 후, 공백 1개 이상 연속된 부분을 기준으로 문자열 분리
// "[ ]+"는 공백문자(space)를 1개 이상 반복하는 것을 의미
return my_string.trim().split("[ ]+");
}
}
// 장점: 간단하고 직관적임
// 단점: 공백이 탭 등 다른 공백 문자일 경우 분리 안됨
// 2. 정규식 "\\s+"를 이용한 split
class Solution {
public String[] solution(String myString) {
// trim으로 앞뒤 공백 제거 후, 모든 공백 문자(스페이스, 탭, 개행 등) 1개 이상 연속된 부분을 기준으로 분리
// "\\s+"는 정규식에서 공백 문자를 의미하는 \s를 표현 (자바 문자열이어서 \ 두 번)
return myString.trim().split("\\s+");
}
}
// 장점: 공백 문자(스페이스뿐 아니라 탭, 개행 등) 모두 포괄함
// 가장 범용적이며 일반적으로 권장되는 방식
// 3. StringTokenizer를 사용
import java.util.*;
class Solution {
public String[] solution(String my_string) {
// StringTokenizer는 공백을 기준으로 토큰을 하나씩 얻어옴
StringTokenizer st = new StringTokenizer(my_string);
int N = st.countTokens();
String[] result = new String[N];
for (int n = 0; n < N; n++)
result[n] = st.nextToken();
return result;
}
}
// 장점: 과거부터 사용된 방법으로 간단한 토큰 분리 용이
// 단점: 빈 토큰(연속 공백 사이 빈 문자열)을 포함하지 않음 -> 이 문제에서 장점!!!
// split("")과 달리 연속된 공백은 하나로 인식함
// performance 면에서는 보통 split보다 빠름
StringTokenizer는 문자열을 특정 구분자를 기준으로 분리하는 토큰화 클래스- 기본 구분자는 공백(스페이스, 탭, 개행 등)이며, 구분자를 지정하지 않으면 공백으로 토큰을 나눕니다.
- 생성자는 보통
StringTokenizer(String str)또는StringTokenizer(String str, String delim)형식으로 사용합니다.
- 토큰이 남아있는지 확인하는
hasMoreTokens()메서드로 반복하며,nextToken()메서드로 다음 토큰(분리된 문자열 조각)을 가져옵니다.
- 토큰의 총 개수를 반환하는
countTokens()메서드도 있습니다.
- 구분자 자체를 토큰으로 포함시킬지 여부를 세 번째 boolean 인자에 설정할 수 있습니다.
Share article