어제 오늘 내일

[Java] 구분자로 문자열 자르기 (split) 본문

IT/Java

[Java] 구분자로 문자열 자르기 (split)

hi.anna 2021. 4. 28. 06:33

 

지난 번에는 java.lang.String 클래스의 substring() 메소드를 이용하여

문자열을 자르는 방법을 알아보았습니다.

[Java] 문자열 자르기 (substring)

 

이번에는 구분자를 사용하여 문자열을 자르는 방법을 알아보도록 하겠습니다.

 

구분자로 문자열 자르기 - split()

구분자를 사용하여 문자열을 자를 때는 

java.lang.String 클래스의 split() 메소드를 사용합니다.

 

 1. Method Signature 

split() 메소드는 다음과 같이 2가지 형태로 사용할 수 있습니다.

  • public String[] split(String regex)
  • public String[] split(String regex, int limit)

 

 

 2. split(String regex) 

정규식 문자열을 파라미터로 받아서,

정규식 문자열과 일치하는 부분을 중심으로 문자열을 잘라서,

잘려진 문자열들을 배열로 리턴합니다.

public String[] split(String regex)

 

  코드 1 - 콤마+공백으로 문자열 나누기  

import java.util.Arrays;

public class StringSplit {
    public static void main(String[] args) {

        // 1. split 할 문자열 준비
        String str = "apple, banana, orange, grape";

        // 2. ", "를 구분자로 문자열 split
        String[] strArr = str.split(", ");

        // 3. 결과 출력
        System.out.println(Arrays.toString(strArr));
    }
}

  결과 1  

[apple, banana, orange, grape]

str.split(", ");

문자열을 구분자 ", "로 나누어서, 각각의 문자열을 배열에 담아서 리턴하였습니다.

 

 

  코드 2 - 공백으로 문자열 나누기 (정규식 사용)  

import java.util.Arrays;

public class StringSplit {
    public static void main(String[] args) {

        // 1. split 할 문자열 준비
        String str = "apple banana orange grape";

        // 2. 공백을 의미하는 정규식("\s")을 구분자로 문자열 split
        String[] strArr = str.split("\\s");

        // 3. 결과 출력
        System.out.println(Arrays.toString(strArr));
    }
}

  결과 2  

[apple, banana, orange, grape]

str.split("\\s");

파라미터로 공백을 의미하는 정규식 "\s"를 전달하였습니다.

위 코드는 공백으로 문자열을 잘라서, 결과를 배열에 담아 리턴 합니다.

 

 

 

 3. split(String regex, int limit) 

split() 메소드는,

구분자 regex와 함께 limit 값을 입력 받을 수도 있습니다.

public String[] split(String regex, int limit)

 

 limit > 0 이면, 

패턴은 (limit - 1)번 만큼 적용됩니다.

그리고, 리턴 배열의 마지막 원소는, 패턴이 적용되고 난 나머지 문자열이 됩니다.

 

 limit = 0 이면, 

패턴은 횟수 제한 없이 모두 적용되고, 배열의 마지막에 빈 문자열이 올 경우 모두 삭제됩니다.

 

 limit < 0 이면, 

limit = 0 인 경우와 마찬가지로, 횟수 제한 없이 패턴이 모두 적용되지만,

limit = 0 인 경우와 다르게, 배열의 마지막에 빈 문자열이 올 경우 빈 문자열이 그대로 유지됩니다.

 

  코드 1 - limit > 0 인 경우  

public class StringSplit {
    public static void main(String[] args) {

        // 1. split 할 문자열 준비
        String str = "apple,banana,,orange,grape,,";

        // 2. ","을 구분자로 문자열 split
        // 2. limit = 4
        String[] strArr = str.split(",", 4);

        // 3. 결과 출력
        for (String s : strArr) {
            System.out.println("\"" + s + "\"");
        }
    }
}

  결과 1  

"apple"
"banana"
""
"orange,grape,,"

str.split(",", 4);

구분자를 콤마(",")로 지정하고, limit 값을 4로 지정하였습니다.

구분자(",")로 문자열에서 패턴을 3번(limit - 1) 찾아서 리턴 배열에 넣고,

나머지 문자열을 리턴 배열의 마지막에 넣었습니다.

 

 

  코드 2 - limit = 0 인 경우  

public class StringSplit {
    public static void main(String[] args) {

        // 1. split 할 문자열 준비
        String str = "apple,banana,,orange,grape,,";

        // 2. ","을 구분자로 문자열 split
        // 2. limit = 0
        String[] strArr = str.split(",", 0);

        // 3. 결과 출력
        for (String s : strArr) {
            System.out.println("\"" + s + "\"");
        }
    }
}

  결과 2  

"apple"
"banana"
""
"orange"
"grape"

str.split(",", 0);

limit 값으로 0을 지정하였습니다.

횟수 제한 없이 구분자(",")로 문자열을 잘라서 리턴 배열에 담아서 리턴하였습니다.

주의해서 볼 것은, 마지막에 들어갔어야 할 비어있는 배열 2개가 리턴 배열에 담기지 않았다는 것입니다.

limit = 0이면, 리턴 배열의 마지막에 빈 문자열이 올 경우, 모두 삭제됩니다.

 

 

  코드 3 - limit < 0 인 경우  

public class StringSplit {
    public static void main(String[] args) {

        // 1. split 할 문자열 준비
        String str = "apple,banana,,orange,grape,,";

        // 2. ","을 구분자로 문자열 split
        // 2. limit < 0
        String[] strArr = str.split(",", -1);

        // 3. 결과 출력
        for (String s : strArr) {
            System.out.println("\"" + s + "\"");
        }
    }
}

  결과 3  

"apple"
"banana"
""
"orange"
"grape"
""
""

str.split(",", -1);

limit 값으로 음수가 입력되었습니다.

limit 값으로 음수가 입력되면, limit = 0인 경우와 마찬가지로

횟수 제한 없이 문자열을 구분자(",")로 split하여 리턴 배열에 담아줍니다.

limit = 0인 경우와 다른 점은,

리턴 배열의 마지막에, 빈 문자열이 오더라도 이 원소를 생략하지 않는다는 것입니다.

 


 

java.lang.String 클래스의 split() 메소드를 사용하여

구분자로 문자열을 자르는 방법을 알아보았습니다.

 

 

 

반응형
Comments