split()

드코미·2026년 6월 20일
post-thumbnail

문자열을 특정 기준(구분자)으로 잘라서 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"]

⚠️ split() 결과는 무조건 String[]

이게 코테에서 제일 중요

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(" ", -1)

문제 상황

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을 써두는 거예요. (앞서 말씀드렸듯, 이 문제 조건상 꼭 필요한 건 아니지만 습관적으로 붙여두면 안전합니다.)

profile
할 수 있다!!!

0개의 댓글