[Java, String] split() 메서드 정리 - 문자열 자르기

2025. 7. 13. 00:04·Backend/Java

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

분할 과정:

  1. 위치 0-2: "try"
  2. 위치 3: 공백 (제거됨)
  3. 위치 4-4: 빈 문자열 ""
  4. 위치 5: 공백 (제거됨)
  5. 위치 6-10: "hello"
  6. 위치 11: 공백 (제거됨)
  7. 위치 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
'Backend/Java' 카테고리의 다른 글
  • [Java] 약수의 개수를 구하는 효율적인 알고리즘 정리
  • [Java] 배열 복사 메서드 간단 정리
  • [Java, Stack] 왜 Stack이 아닌 Deque로 스택을 구현해야 할까?
  • [Java] StringTokenizer 란?
devoks
devoks
꾸준히 작성해보자!
  • devoks
    ok's 개발 블로그
    devoks
  • 전체
    오늘
    어제
    • 분류 전체보기 (112) N
      • Backend (15)
        • SpringBoot (0)
        • Java (15)
      • Cs (18) N
      • Infra (0)
        • AWS (0)
        • Docker (0)
      • CodingTest (79)
        • Programmers (79)
  • 링크

    • My GitHub
  • 인기 글

  • 태그

    switch
    StringTokenizer
    effectivejava
    BufferedReader
    BufferedWriter
    java
    codingtest
    json
    CS
    programmers
  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
devoks
[Java, String] split() 메서드 정리 - 문자열 자르기
상단으로

티스토리툴바