44. [Java] 공백으로 구분하기 2 - 정규식
https://school.programmers.co.kr/learn/courses/30/lessons/181868
- 단어가 공백 한 개 이상으로 구분되어 있는 문자열 my_string이 매개변수로 주어질 때,
- my_string에 나온 단어를 앞에서부터 순서대로 담은 문자열 배열을 return
- my_string은 영소문자와 공백으로만 이루어져 있다.
- 1 ≤ my_string의 길이 ≤ 1,000
- my_string의 맨 앞과 맨 뒤에도 공백이 있을 수 있다.
- my_string에는 단어가 하나 이상 존재한다.
정답코드
class Solution {
public String[] solution(String my_string) {
return my_string.trim().split("\\s+");
}
}
trim()
→ 문자열 앞뒤 공백 제거 (불필요한 빈 문자열 방지)split("\\s+")
→공백(스페이스)
이 하나 이상(+
) 있는 부분을 기준으로 나눔
→\\s+
는 **하나 이상의 공백 문자(스페이스, 탭 등)을 뜻한다.
split(" ")
, split(" +")
, split("\\s+")
차이
✅ 1. split(" ")
- 의미: 공백 한 칸(" ")만 기준으로 나눔
- 문제: 공백이 두 칸 이상일 경우 빈 문자열이 생김
String str = " hello world ";
String[] arr = str.split(" ");
→ 결과: ["", "", "hello", "", "world", "", ""]
공백이 많으면 그만큼
""
빈 문자열이 생김
✅ 2. split(" +")
- 의미: 공백(스페이스) 하나 이상을 기준으로 나눔
- 공백이 여러 칸이어도 한 번에 나눠짐 (좋음!)
- 하지만
탭
,줄바꿈(\n)
같은 다른 공백 문자는 못 나눔
String str = " hello world ";
String[] arr = str.trim().split(" +");
→ 결과: ["hello", "world"]
✅ 3. split("\\s+")
- 의미: 모든 공백 문자(스페이스, 탭, 줄바꿈 등) 하나 이상을 기준으로 나눔
- 즉,
" "
,"\t"
,"\n"
모두 포함됨 - ← 가장 안전하고 추천하는 방식이다.
String str = " hello\tworld \njava ";
String[] arr = str.trim().split("\\s+");
→ 결과: ["hello", "world", "java"]
비교 정리
구분 | 여러 칸 공백 | 탭/줄바꿈 처리 | 빈 문자열 생김 여부 |
---|---|---|---|
| ❌ | ❌ | O |
| ✅ | ❌ | X |
| ✅ | ✅ | X ✅ (추천) |