Study/java

[Java] String - split() 문자열 자르기, 문자열 배열 변환

 

자바의 String 클래스 split 메소드는 문자열을 구분자를 기준으로 잘라서 배열로 반환하는 메소드입니다.

구분자는 특수문자나 공백같은 것도 될 수 있고, 정규식을 사용할 수도 있습니다.

예제를 사용하여 split 메소드 사용법을 설명드리겠습니다.

 

split(String regex, int limit)

limit는 제외 가능합니다.

limit가 -1이면 limit 값이 없다고 간주합니다.

이 메소드는 정규식을 기준으로 문자열을 잘라서 배열로 만들어주는 메소드입니다.

문자열 자르기와 배열로 변환하기 두 가지 기능을 한번에 수행합니다.

 

import java.util.Arrays;

public class StringSplit {
	public static void main(String[] args) {
		String s = "a:b:c:d:e";
		String[] arr = s.split(":");
		System.out.println(Arrays.toString(arr));
		
		String[] arr2 = s.split(":", 3);
		System.out.println(Arrays.toString(arr2));
	}
}

split 사용 결과
split 사용 결과

 

":"이라는 문자열을 기준으로 분리하여 배열로 만드는 로직입니다.

 

limit가 없는 split을 수행했을때는 ":"이 있는 문자 기준으로 길이 5의 배열이 만들어졌습니다.

limit이 있을때는 2개까지만 자르고 나머지는 하나의 문자열로 하여 배열이 만들어졌습니다.

 

실제 로직을 살펴보면 limit에 해당하는 숫자는 자르는 기준에 포함되지 않습니다.

쉽게 설명하면 3을 넣으면 2개까지만 잘라서 배열로 만듭니다.

 

limit에 -1을 넣으면 limit이 없다고 생각하고 코드가 실행됩니다.

split 함수의 내부에는 limit > 0 조건이 있기 때문에 이 조건에 맞으면 limit을 사용해서 문자열을 나눕니다.

 

 

 

 

예제

한 글자씩 자르기

import java.util.Arrays;

public class StringSplit {

    public static void main(String[] args) {
        String s = "안녕하세요";
        String[] arr = s.split("");

        System.out.println(Arrays.toString(arr));
    }
}

split 함수를 사용하여 한 글자씩 자르기
split 함수를 사용하여 한 글자씩 자르기

빈 문자열을 넣으면 한 글자씩 잘라서 배열로 만들 수 있습니다.

 

정규식 사용

import java.util.Arrays;

public class StringSplit {

    public static void main(String[] args) {
        String s = "aaabbbcccdddeee";
        String[] arr = s.split("[a-c]");

        System.out.println("arr=" + Arrays.toString(arr));
    }
}

정규식과 일치하는 문자열이 다 잘림
정규식과 일치하는 문자열이 다 잘림

정규식을 사용하게 되면 그 정규식과 일치하는 문자를 기준으로 문자열을 자릅니다.

단일 문자열 말고 여러가지 문자열을 기준으로 자르고 싶을 때 정규식을 적절하게 사용하면 됩니다.

 

예외 문자

split에는 대부분의 문자열을 사용할 수 있지만 사용할 수 없는 문자열이 존재합니다.

import java.util.Arrays;

public class StringSplit {

    public static void main(String[] args) {
        String s = "안./녕./하./세./요";
        String[] dotArr = s.split(".");

        System.out.println("dotArr=" + Arrays.toString(dotArr));
    }
}

split에 .을 그대로 사용했을 때
split에 .을 그대로 사용했을 때

점(.)은 split 내부에서 사용되는 문자열이기 때문에 점(.)을 그대로 사용하면 원하는대로 자를 수가 없습니다.

 

이런 경우에는 다음과 같이 사용하면 됩니다.

import java.util.Arrays;

public class StringSplit {

    public static void main(String[] args) {
        String s = "안./녕./하./세./요";
        String[] dotArr = s.split("\\.");

        System.out.println("dotArr=" + Arrays.toString(dotArr));
    }
}

.과 역슬래시 함께 사용 결과
.과 역슬래시 함께 사용 결과

역슬래시 2개를 같이 사용하면 점(.)을 기준으로 분리할 수 있습니다.