
문자열을 특정 기준(구분자)으로 잘라서 String[] 배열로 반환한다.
String s = "1 2 3 4";
// 공백(" ")을 기준으로 문자열 자르기
String[] arr = s.split(" ");
결과
// arr
["1", "2", "3", "4"]
String s = "apple banana orange";
// 공백을 기준으로 문자열 분리
String[] arr = s.split(" ");
결과
["apple", "banana", "orange"]
String s = "10,20,30,40";
// 쉼표를 기준으로 문자열 분리
String[] arr = s.split(",");
결과
["10", "20", "30", "40"]
이게 코테에서 제일 중요
String s = "1 2 3 4";
String[] arr = s.split(" ");
결과
["1", "2", "3", "4"]
이렇게 생겼다고 해서 숫자 배열이 아니다.
컴퓨터 입장에서는
"1"
"2"
"3"
"4"
모두 문자열(String)이다.
따라서 숫자 계산을 하려면 변환해야 한다.
String s = "1 2 3 4";
String[] arr = s.split(" ");
for(String str : arr){
// String → int 변환
int num = Integer.parseInt(str);
System.out.println(num);
}
프로그래머스 "최댓값과 최솟값" 같은 문제
String s = "1 2 3 4";
// 공백 기준으로 자르기
String[] arr = s.split(" ");
// 첫 번째 숫자로 초기화
int max = Integer.parseInt(arr[0]);
int min = Integer.parseInt(arr[0]);
for(String str : arr){
// 문자열을 숫자로 변환
int num = Integer.parseInt(str);
// 최대값 갱신
max = Math.max(max, num);
// 최소값 갱신
min = Math.min(min, num);
}
⭐ 특히 프로그래머스에서는
String[] arr = s.split(" ");
int num = Integer.parseInt(arr[i]);
이 두 줄이 진짜 자주 나온다.
그래서 나는 코테에서 split()을 보면 거의 반사적으로
String[] arr = s.split(" ");
int num = Integer.parseInt(arr[0]);
까지 같이 떠올려. 이 둘은 세트라고 생각하면 돼.
문제 상황
split(" ")을 그냥 쓰면, 문자열 끝에 빈 문자열이 생기는 경우 자바가 그걸 자동으로 삭제해버려요. 이게 자바 split의 기본 동작입니다.
"a b ".split(" ")
// 결과: ["a", "b"] ← 끝에 생겨야 할 "" 가 사라짐
원래 자르면 ["a", "b", ""]가 나와야 정상인데(공백 뒤에 아무것도 없으니 빈 문자열), 자바가 "끝에 있는 빈 문자열은 의미 없다"고 판단해서 자동으로 지워버리는 거예요.
그게 왜 문제가 되냐면
우리는 나중에 이 배열을 다시 String.join(" ", words)로 합쳐서 원래 문자열 구조를 그대로 복원해야 해요.
원본: "a b " (끝에 공백 1개)
만약 split(" ") 써서 ["a", "b"]가 나오면:
String.join(" ", ["a", "b"])
// 결과: "a b" ← 끝에 있던 공백이 사라짐! 원본과 다름!
근데 split(" ", -1) 써서 ["a", "b", ""]가 나오면:
String.join(" ", ["a", "b", ""])
// 결과: "a b " ← 끝 공백까지 정확히 복원됨!
즉,
-1을 쓰는 이유
"끝에 있던 빈 문자열도 자르지 말고 그대로 남겨놔" 라는 뜻이에요. 그래야 나중에 다시 합칠 때 원본의 공백 구조(특히 끝부분)가 정확히 보존됩니다.
한 줄 요약
| 옵션 | 동작 |
|---|---|
split(" ") | 끝에 생기는 빈 문자열을 자동으로 지움 → 끝 공백 정보 손실 가능 |
split(" ", -1) | 끝에 생기는 빈 문자열도 안 지우고 그대로 둠 → 원본 구조 그대로 보존 |
이 문제에서는 "혹시 입력 끝에 공백이 있을 수도 있으니" 안전하게 -1을 써두는 거예요. (앞서 말씀드렸듯, 이 문제 조건상 꼭 필요한 건 아니지만 습관적으로 붙여두면 안전합니다.)