입력에 대한 예외 처리를 하기 위해 이것 저것 다양한 입력 예시를 넣어보면서 테스트 하다가 String의 split 메서드가 빈 문자열을 처리하는 방식을 알아보게 되었습니다.
결론만 말하자면 String.split()으로 만들어진 문자열 배열에서, 빈 문자열이 있는 경우, 후행 빈 문자열을 모두 삭제합니다.
뒤에서부터 실제 분할된 문자열이 나오기 전까지 등장하는 빈 문자열들은 모두 무시한다는건데요, 이 설명만으로는 쉽게 이해가 되지 않으니 예시로 이해해봅시다!
"boo:and:foo".split("o"); // 1
",,".split(","); // 2
" , ,,".split(","); // 3
",, ,".split(","); //
각 테스트의 결과는 아래와 같습니다.
1. ["b", "", ":and:f"]
2. []
3. [" ", " "]
4. ["", "", " "]
예를 들어 1번의 경우 "o"를 딜리미터로 하여 1차로 분할하면
["b", "", :and:f", "", ""]가 되는데요, 배열 뒷부분의 빈 문자열들은 삭제되어 결과적으로 ["b", "", ":and:f"]가 되는 것입니다!
그럼 빈 문자열을 모두 살리고 싶다면 어떻게 할까요? split의 두 번째 인자로 음수 값을 넘겨주면 빈 문자열을 삭제하지 않습니다.
"boo:and:foo".split("o", -1); // ["b", "", ":and:f", "", ""]
",,".split(",", -1); // ["", "", ""]
" , ,,".split(",", -1); // [" ", " ", "", ""]
",, ,".split(",", -1); // ["", "", " ", ""]