[알고리즘문제풀기] 공백으로 구분하기 2

silver's avatar
Aug 09, 2025
[알고리즘문제풀기] 공백으로 구분하기 2

문제

내가 작성한 정답

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

silver