본문 바로가기
Java

[Java] 문자열 자르기 split ( Limit 사용하여 마지막 빈 문자열 담기 )

by Jo__y 2023. 9. 12.

그동안 split 은 단순히 구분자를 이용하여 문자열 자르는 용도로만 써오다가
코딩테스트 문제를 풀다가 split 의 기능을 제대로 알게 되었다.

문제

주어진 문자열이 예를들어
String str = "a-b--c-d--" ; 일경우에
split 을 하여 마지막 빈 문자열도 배열에 담아야 한다.

해결

split() 메소드는 2가지 메서드로 분류된다.

  1. public String[] split(String regex)
  2. public String[] split(String regex, int limit)

첫번째 방법으로 문자열을 자르면
[a, b, , c, d] 로 마지막 빈 문자열을 무시한다.

두번째 방법은 양수,0,음수 일때 세가지로 분류된다.
limit > 0
limit - 1 만큼 패턴이 적용되고, 나머지 모든 문자열이 마지막 원소가 된다.
limit = 0
패턴이 모든 문자열에 적용되지만, 마지막에 빈 문자열이 올 경우 배열에 담기지 않는다.
limit < 0
패턴이 모든 문자열에 적용되고, 마지막에 빈 문자열에 올 경우에도 그대로 배열에 담긴다.

코드

    @Test
    public void stringSplit() {
        String str = "a-b--c-d--";

        String[] arr1 = str.split("-");
        System.out.println("기본 split : " + Arrays.toString(arr1));

        String[] arr2 = str.split("-",3);
        System.out.println("limit 이 양수일때 : " +Arrays.toString(arr2));

        String[] arr3 = str.split("-",0);
        System.out.println("limit 이 0일 때 : " +Arrays.toString(arr3));

        String[] arr4 = str.split("-",-1);
        System.out.println("limit 이 음수일때 : " +Arrays.toString(arr4));
    }

결과

기본 split : [a, b, , c, d]
limit 이 양수일때 : [a, b, -c-d--]
limit 이 0일 때 : [a, b, , c, d]
limit 이 음수일때 : [a, b, , c, d, , ]

양수 일때는 limit-1 인 2번째 index 까지 a,b 까지 "-" 패턴이 적용되어 배열에 담기고
나머지 -c-d-- 가 마지막 원소로 담긴다.

0 일때는 모든 문자열에 "-" 패턴이 적용되지만, 마지막에 빈 문자열이 삭제되어 배열에 담긴다.

음수 일때는 모든 문자열에 "-" 패턴이 적용되고, 마지막 빈 문자열 모두 배열에 담긴다.

댓글