JAVA 문자열 나누기 분할 split 함수 사용 방법

문자열을 지정한 문자를 기준으로 자르는 방법에 대해 알아보겠습니다.

구분자를 지정해 문자열을 자르기 위해서는 split함수를 사용합니다.

split함수를 사용해 문자를 자를 때는 정규식을 지정합니다.

 

샘플을 보면서 사용 방법을 보겠습니다.

import java.util.Arrays;

public class Program
{
    public static void main(String[] args) {
		String str = "A,BC,,D";
        String[] split = str.split(",");
        System.out.println(Arrays.toString(split)); // → [A, BC, , D]
        System.out.println(split.length); // → 4
	}
}

 

결과

[A, BC, , D]
4

 

split함수를 사용해 문자를 분할하였습니다.

자르는 기준은 ,(콤마)로 지정했습니다.

split함수의 반환값은 배열형태로 반환합니다.

str 변수에는 문자를 자를 군부자 문자열인 , (콤마)가 3개 있습니다.

4개로 분할이 되었기 때문에 배열에 길이도 4개가 되었습니다.

만약, 지정한 구분자가 없으면 문자열을 분할하지 않고 그대로 반환을 합니다.

그대로 반환을 하지만 데이터 형태는 배열입니다.

import java.util.Arrays;

public class Program
{
    public static void main(String[] args) {
		String str = "A,BC,,D";
        String[] split = str.split("x");
        System.out.println(Arrays.toString(split)); // → [A,BC,,D]
        System.out.println(split.length); // → 1
	}
}

 

결과

[A,BC,,D]
1

 

split함수에 지정한 값은 정규식이기 때문에 주의해서 사용해야 합니다.

예를 들어 .으로 문자열을 자르는 예제를 보도록 하겠습니다.

import java.util.Arrays;

public class Program
{
    public static void main(String[] args) {
		String str = "A.BC..D";
        String[] split = str.split(".");
        System.out.println(Arrays.toString(split)); // → []
        System.out.println(split.length); // → 0
	}
}

 

정규식에서 .은 임의의 문자 1개를 의미합니다.

구분자를 .으로 하고 싶은 경우에는 \을 붙여 에스케이프 해서 사용해야 합니다.

import java.util.Arrays;
import java.util.regex.Pattern;

public class Program
{
    public static void main(String[] args) {
		String str = "A.BC..D";
		String[] split1 = str.split(".");
		String[] split2 = str.split("\\.");
		String[] split4 = str.split(Pattern.quote("."));
		String[] split3 = str.split("[.]");
		
		System.out.println(Arrays.toString(split1)); // → [] 
		System.out.println(Arrays.toString(split2)); // → [A, BC, , D]
		System.out.println(Arrays.toString(split3)); // → [A, BC, , D]
		System.out.println(Arrays.toString(split4)); // → [A, BC, , D]

	}
}

 

결과

[]
[A, BC, , D]
[A, BC, , D]
[A, BC, , D]

 

에스케이프를 하지 않고 Pattern.quote을 사용해서도 가능합니다.

Pattern.quote 사용하기 위해서는 import java.util.regex.Pattern를 해야 합니다.

split함수에 두 번째 파라미터를 지정해 반환값을 조정할 수 있습니다.

import java.util.Arrays;

public class Program
{
    public static void main(String[] args) {
       String str = "A,B,C,,,";

        System.out.println("----- split1 -----"); 
        String[] split1 = str.split(",", 1);
        for(int i = 0; i < split1.length; i++) {
			System.out.println(i + " : " + split1[i]);
        }
      
        System.out.println("\r\n----- split2 -----"); 
        String[] split2 = str.split(",", 2);
        for(int i = 0; i < split2.length; i++) {
			System.out.println(i + " : " + split2[i]);
        }

        System.out.println("\r\n----- split3 -----"); 
        String[] split3 = str.split(",", 3);
        for(int i = 0; i < split3.length; i++) {
			System.out.println(i + " : " + split3[i]);
        }

        System.out.println("\r\n----- split10 -----"); 
        String[] split10 = str.split(",", 10);
        for(int i = 0; i < split10.length; i++) {
			System.out.println(i + " : " + split10[i]);
        }
	}
}

 

결과

----- split1 -----
0 : A,B,C,,,

----- split2 -----
0 : A
1 : B,C,,,

----- split3 -----
0 : A
1 : B
2 : C,,,

----- split10 -----
0 : A
1 : B
2 : C
3 : 
4 : 
5 :

 

두 번째 파라미터에 지정한 값만큼만 문자열을 분할합니다.

split(“,”, 1)는 1개로 나눠서 반환을 했습니다.

1개로 분할했기 때문에 분할 전후가 차이가 없습니다.

split(“,”, 2)는 2개로 나눠서 반환을 했습니다.

첫 번째 구분자로 찾은 문자열과 그 뒤에 문자열 2개로 분할되었습니다.

split(“,”, 3)는 3개로 나눠서 반환을 했습니다.

첫 번째 구분자로 찾은 문자열과 두 번째 찾은 구분자 문자열 그리고 그 뒤에 문자열 3개로 분할되었습니다.

split(“,”, 10)는 6개로 나눠서 반환을 했습니다.

배열에는 구분자인 콤마가 5개 존재하기 때문에 문자열을 최대 6개로 나눌 수 있습니다.

split 함수에 지정한 10보다 최대로 나눌 수 있는 문자열이 적기 때문에 최대치인 6개로 문자열을 분할해 반환했습니다.

댓글