문자열을 지정한 문자를 기준으로 자르는 방법에 대해 알아보겠습니다.
구분자를 지정해 문자열을 자르기 위해서는 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개로 문자열을 분할해 반환했습니다.
 
 

댓글