Java String split() 메서드 완벽 정리
Java에서 문자열을 분할하는 가장 기본적이고 중요한 메서드인 split()
에 대해 자세히 알아보겠습니다.
이 메서드는 정규식을 사용하여 문자열을 배열로 분할하는 강력한 기능을 제공합니다.
기본 문법과 매개변수
public String[] split(String regex)
public String[] split(String regex, int limit)
- regex: 분할 기준이 되는 정규식 (필수)
- limit: 분할 횟수 제한 (선택사항)
limit 매개변수의 동작 방식
limit > 0: 분할 횟수 제한
String s = "a,b,c,d";
String[] result = s.split(",", 3);
// 결과: ["a", "b", "c,d"] - 최대 2번만 분할하여 3개 요소 생성
limit = 0: 기본 동작 (끝의 빈 문자열 제거)
String s = "a,,b,,";
String[] result = s.split(",");
// 결과: ["a", "", "b"] - 끝의 빈 문자열들이 제거됨
limit < 0: 모든 분할 + 끝의 빈 문자열 보존
String s = "a,,b,,";
String[] result = s.split(",", -1);
// 결과: ["a", "", "b", "", ""] - 끝의 빈 문자열들도 보존
헷갈리기 쉬운 동작 방식
🤔 흔한 오해: 구분자가 결과에 포함된다?
구분자 (공백, "," 등) 가 연속으로 나오는 경우에 split()을 하게된다면 어떻게 될까요?
❌ 잘못된 예상:
String s = "try hello "; // 공백이 연속으로 나오는 문자열
String[] result = s.split(" ", -1); // 공백을 기준으로 구분
// 예상: ["try", " hello", " "] - 공백을 기준으로 분리하니 원소에 공백도 포함되려나?
✅ 실제 결과:
String s = "try hello ";
String[] result = s.split(" ", -1);
// 실제: ["try", "", "hello", "", ""] - 공백은 모두 날아가고 빈문자열이 원소에 생김
🔍 동작 원리 분석
split()
메서드는 구분자를 완전히 제거하고 분할합니다.
String s = "try hello ";
// 위치: t r y [공백] [공백] h e l l o [공백] [공백]
// 0 1 2 3 4 5 6 7 8 9 10 11
분할 과정:
- 위치 0-2: "try"
- 위치 3: 공백 (제거됨)
- 위치 4-4: 빈 문자열 ""
- 위치 5: 공백 (제거됨)
- 위치 6-10: "hello"
- 위치 11: 공백 (제거됨)
- 위치 12-12: 빈 문자열 ""
💡구분자로 지정된 문자는 모두 제거되고 해당 구분자를 기준으로 빈 문자열까지 모두 split 하게 됩니다!
구분자가 연속으로 나온다면 두개의 구분자 사이에 빈 문자열이 있다고 판단하고 분리하는 것이죠
실제 사용 예제
기본 분할
String text = "Java is a fun programming language";
String[] words = text.split(" ");
// 결과: ["Java", "is", "a", "fun", "programming", "language"]
여러 구분자 사용 (정규식)
String text = "apple,banana;orange:grape";
String[] fruits = text.split("[,;:]"); // 괄호안에 들어간 모든 구분자를 기준으로 분리
// 결과: ["apple", "banana", "orange", "grape"]
특수 문자 처리
String url = "www.example.com";
String[] parts = url.split("\\."); // 점(.)은 이스케이프 필요
// 결과: ["www", "example", "com"]
'Backend > Java' 카테고리의 다른 글
[Java] 약수의 개수를 구하는 효율적인 알고리즘 정리 (0) | 2025.07.16 |
---|---|
[Java] 배열 복사 메서드 간단 정리 (0) | 2025.07.15 |
[Java, Stack] 왜 Stack이 아닌 Deque로 스택을 구현해야 할까? (1) | 2025.07.10 |
[Java] StringTokenizer 란? (0) | 2025.07.10 |
[Java] BufferedReader, BufferedWriter 란? (0) | 2025.07.10 |