본문 바로가기
Backend/Java

[Java]split() 메서드

by sukii 2024. 9. 11.
반응형

2024 2회차 정보처리기사 실기 시험 20번 문제에 나온 Java split 메서드

 

주어진 기준값으로 문자열을 분할하는건 알겠는데..

주어진 기준값은 문자열 배열에 들어가게 되는건지 아닌지 헷갈려서 결국 그 문제는 틀렸다 🤪

그랬는데 시험 다 보고 나니까 실무 중에 쓸 일이 있어서 다시 보는 김에 정리해본다.

 

 

👨‍💻split() 메서드란?

자바의 String 클래스에 포함된 메서드로, 문자열을 특정 구분자(Delimiter)나 정규 표현식을 기준으로 분할하여 배열로 반환해주는 메서드

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

 

regex에는 분할의 기준이 될 문자 또는 정규표현식을 넣어준다.

limit은 선택사항으로, limit이 양수일 경우 결과 배열의 크기는 최대 limit 요소를 가지며, 음수일 경우 제한 없이 모든 분할 결과를 포함한다.

 

 

예시 1) 특정 문자를 이용하여 분할(2024 2회차 정처기 실기 기출 문제 복원)

(*실제 문제와 약간 다를 수는 있음)

public class Main {
    
    public static String split_and_get_kth_value(String input_str, int k) {
        String[] split_result = input_str.split("T"); // 'T'로 문자열 분할
        return split_result[k]; // k번째 요소 반환
    }

    public static void main(String[] args) {
        String input_str = "ITISTESTSTRING";
        int k = 3;

        // 메서드 호출
        String result = split_and_get_kth_value(input_str, k);
        
        // 결과 출력
        System.out.println(result); //출력 결과는 S
        
        // 배열을 문자열로 변환하여 출력(이 부분은 실제 문제에 없었음)
        System.out.println("result = " + Arrays.toString(resultArray));
    }
}

 

▷ result = [I, IS, ES, S, RING];

배열 출력 결과를 보면 구분 기준이 된 'T'는 제외하고 분할된 나머지 문자열들만 배열에 담겼다.

그런데 여기서 정규 표현식에서 사용하는 특수 문자(|, ., *, + 등)를 기준으로 문자열을 분할하려고 하면 결과가 달라진다.

 

 

예시 2) 정규표현식에서 사용하는 특수문자 (|, ., *, + 등) 을 이용하여 분할

public class Main {
    public static void main(String[] args) {
        String str = "1|2|3";
        
        String[] result = str.split("|"); 

        // 결과 출력
        for (String s : result) {
            System.out.print("result = "+ Arrays.toString(result));
        }
    }
}

 

 result = [1, |, 2, |, 3];

특수문자를 사용한 결과는 구분 기준이 된 "|" 도 배열에 담긴다. 그럼 이 때 특수문자는 배열에 담고 싶지 않다면?

이스케이프 처리를 해주면 된다.

 

 

예시 3) 정규표현식에서 사용하는 특수문자 (|, ., *, + 등) 을 이스케이프 처리하여 분할

public class Main {
    public static void main(String[] args) {
        String str = "1|2|3";
        
        // '|'를 기준으로 문자열을 분할하려면 '\\|'로 이스케이프 처리
        String[] result = str.split("\\|"); 

        // 결과 출력
        for (String s : result) {
            System.out.println("result = " + Arrays.toString(result));
        }
    }
}

 

 result = [1, 2, 3];

특수문자  "|" 를 이스케이프 처리하니, 배열에 "|"는 없는 것을 확인할 수 있다.

반응형