✔️ 한 줄 요약
String[] split(String regex) : regex 구분자를 기준으로 문자열을 분할 (limit = 0 과 같이 작동), 분리된 문자열은 배열로 반환
String[] split(String regex, int limit) : regex 구분자를 기준으로 문자열을 분할(= 패턴), 분리된 문자열은 배열로 반환
- limit < 0 : 패턴이 가능한 한 많이 적용, 마지막 패턴 뒤 빈 문자열이 있다면 결과 배열에 포함
- limit = 0 : 패턴이 가능한 한 많이 적용, 마지막 패턴 뒤 빈 문자열이 있어도 결과 배열에 포함되지 않음
- limit > 0 : 패턴이 최대 limit - 1번 적용되고, 결과 배열의 최대 길이는 limit
split(String regex) vs split(String regex, int limit)
문자열을 기준 문자로 분리하려고 할 때 split() 메소드를 자주 사용하게 된다.
java 공식문서에 따르면 split 메소드는 regex만 인자로 가지는 메소드와 regex, limit 두 가지를 인자로 가지는 메소드로 나뉘어져 있다.
좀 더 자세히 알아보자
java 공식문서의 split 메소드에 대한 설명이다.
두번째 줄에 "이 메소드는 주어진 표현식(regex)과 limit 인수로 0을 사용하는 두 인자를 받는 split 메소드를 호출한 것처럼 동작합니다." 라는 문장이 있다.
limit 인자를 신경쓰지 않고 사용해왔는데 내부적으로 limit의 인수로 0이 들어간 것처럼 작동되고 있던 것이다.
두 가지 인자를 가진 split 메소드는 regex(주어진 정규 표현식)와 일치하는 부분을 기준으로 문자열을 분리해 배열로 반환하며, limit는 regex와 일치하는 부분을 기준으로 문자열을 분리하는 패턴이 적용되는 횟수를 제어하는 매개변수로 배열의 길이를 조절하는데 사용된다.
1. limit > 0
String str = "one,two,three,four";
String[] result = str.split(",", 3);
// result = {"one", "two", "three,four"}
limit가 양수, 0 이상일 때는 최대 limit - 1 번만큼 regex 구분자를 사용하여 문자열을 분리한다.
결과 배열의 길이는 최대 limit 이고, 배열의 마지막 요소는 마지막 구분자 이후의 모든 문자열이 된다.
2. limit == 0
String str = "one,two,,three,";
String[] result = str.split(",", 0);
// result = {"one", "two", "", "three"}
limit가 0일 때는 그동안 사용해왔던 split() 메소드와 같이 동작한다.
패턴이 가능한 한 많이 적용되며 배열의 최대 길이도 제한이 없지만 분리하려는 문자열의 끝에 빈 문자열이 있을경우 제거된다.
3. limit < 0
String str = "one,two,,three,";
String[] result = str.split(",", -1);
// result = {"one", "two", "", "three", ""}
limit가 음수일 때도 0일 때와 마찬가지로 패턴이 가능한 한 많이 적용되며 배열의 최대 길이 제한도 없지만
0일때와 다른 점은 빈 문자열도 결과 배열에 포함된다는 것이다
마지막 빈 문자열도 결과 배열 안에 포함하고 싶을 때 사용할 수 있다
(이런 알고리즘 문제가 있었움...)