ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] String 문자열 split
    java 2022. 11. 1. 14:07

     

    String의 split메서드에 대해서는 대강 써봤지만 정확한 동작과 깊게는 써보지 못한 상태여서 정리한글


    split메서드 결과 배열 출력을 위한 클래스

    package string.split;
    
    public class PrintUtil {
    
    	public static void printStringArray(String[] results) {
    
    		System.out.println("string array length: " + results.length);
    		System.out.println();
    
    		for (String item : results) {
    			System.out.println("item 출력");
    			System.out.println(item);
    			System.out.println("length(): " + item.length());
    			System.out.println("item.isEmpty(): " + item.isEmpty());
    			System.out.println("item.isBlank(): " + item.isBlank());
    			System.out.println();
    		}
    	}
    }

     

    두 종류의 오버로딩 split 메서드 존재

     

    split(String regex, int limit)

    limit가 0일때 아래의 split(String regex)메서드와 같은 동작을 한다.

    split(String regex)


    split 메서드 두개 모두 앞부분에 빈스트링들이 존재할 경우 빈스트링들이 결과 배열에 추가된다.

    (limit값과 관계없다)

    package string.split;
    
    public class Test {
    	public static void main(String[] args) {
    		String testString = ",,1,2,3,4,5";
    		String[] splitResult = testString.split(",", 0);
    		PrintUtil.printStringArray(splitResult);
    	}
    }
    
    // 결과: ""/""/"1"/"2"/"3"/"4"/"5"
    // string array length: 7

    limit가 0인 경우는 조금 특별하다.

    뒷부분의 빈스트링들은 마지막 값이 빈스트링인 경우 포함되지 않고, 마지막 값이 빈스트링이 아닌 경우 포함된다.

     

    마지막 값이 빈스트링인 경우

    package string.split;
    
    public class Test {
    	public static void main(String[] args) {
    		String testString = "1,2,3,4,5,,,";
    		String[] splitResult = testString.split(",", 0);
    		PrintUtil.printStringArray(splitResult);
    	}
    }
    
    // 결과 "1"/"2"/"3"/"4"/"5"
    // string array length: 5

     

    마지막 값이 빈스트링이 아닌 경우

    package string.split;
    
    public class Test {
    	public static void main(String[] args) {
    		String testString = "1,2,3,4,5,,, ";
    		String[] splitResult = testString.split(",", 0);
    		PrintUtil.printStringArray(splitResult);
    	}
    }
    
    // 결과 "1"/"2"/"3"/"4"/"5"/""/""/" "
    // string array length: 8

     

    여기까지 정리

     

    limit값에 관계없이 모든 split 메서드는 앞 부분들 빈스트링들은 모두 포함된다.

     

    limit가 0인 경우

    마지막이 빈스트링이면 뒷부분 빈스트링들은 배열에 포함되지 않는다.

    마지막이 빈스트링이 아닌 경우 뒷부분 빈스트링들은 배열에 포함된다.


    limit가 0이 아닌 경우는 뒷부분 빈스트링들은 항상 포함된다.

    쪼개는 동작은 limit가 0이냐 아니냐에 따라 갈리고 배열 결과를 몇개로 만들것인가에 대해서는 limit가 음수와 양수인 경우에 따라 나뉜다.

     

    limit가 음수인 경우 -> 쪼개버릴 수 있는대로 다쪼갠다.

    package string.split;
    
    public class Test {
    	public static void main(String[] args) {
    		String testString = ",,,1,2,3,4,5,,,";
    		String[] splitResult = testString.split(",", -1);
    		PrintUtil.printStringArray(splitResult);
    	}
    }
    
    // 결과 ""/""/""/"1"/"2"/"3"/"4"/"5"/""/""/""
    // string array length: 11

     

    limit가 양수인 경우 -> 배열 사이즈 최대를 지정한다.

    package string.split;
    
    public class Test {
    	public static void main(String[] args) {
    		String testString = ",,,1,2,3,4,5,,,";
    		String[] splitResult = testString.split(",", 1);
    		PrintUtil.printStringArray(splitResult);
    	}
    }
    
    // 결과 ",,,1,2,3,4,5,,,"
    // string array length: 1

    2인 경우

    ""/",,1,2,3,4,5,,,"

    3인 경우

    ""/",1,2,3,4,5,,,"

    4인 경우

    ""/""/""/"1,2,3,4,5,,,"

     

    'java' 카테고리의 다른 글

    [Java] Mac주소 Hex String 변환  (0) 2022.10.28
    [Java] String.format  (0) 2022.09.07
    [Java] 익명 클래스 초기화 블록  (0) 2022.08.25
    [Java] Comparator,Comparable구현시 주의할 점  (0) 2022.07.13
    까먹은 것들 정리  (0) 2021.12.25

    댓글

Designed by Tistory.