2019년 6월 3일 월요일

java String split 메소드, 문자열 쪼개기




* String.split 메소드 정규표현식 이용하여 자르기



 Java에서 String을 특정 구분자로 잘라야 할 때 보통 split 메소드를 많이 쓰는데 그에 대한 예제이다.

 문자열 중에서 공백을 포함한 특수문자가 들어간 문자열은 모두 쪼개는 코드이다.
처음 문제를 풀 땐 어떻게 해서든 답을 맞춰야 하기 때문에,
아래와 같이 정규표현식에 특수문자를 일일이 지정해주고 쪼갠 후에 비어있는 배열의 값을 체크하여 전체 배열의 길이에서 빼는 임시 방편으로 땜빵(?)하는 모습이다.
빈 문자열 객체나 공백만 있는 문자열은 카운팅하지 않는 것이 문제의 조건이었다.


public class Solution {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String s = scan.nextLine();
        // Write your code here.
        String[] arr = s.split("[\\s!,?._'@]");
        int n = 0;
         for(String t : arr){
            if(t.isEmpty())
                n++;
                continue; 
        }
        System.out.println(arr.length-n);

        for(String t : arr){
            if(t.isEmpty())
                continue;
            
            System.out.println(t);
        }
        scan.close();
    }
}


동일한 내용의 코드를 개선시킨 버전이다.

public class Solution {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String s = scan.nextLine().trim();
        // Write your code here.

        String[] arr = s.split("[^\\p{Alpha}]+");
        int size = s.isEmpty() ? 0 : arr.length;

        System.out.println(size);        
        for(String t : arr){
            if(t.isEmpty())
                continue;
            System.out.println(t);
        }

        scan.close();
    }
}


정규표현식 부분을 아래와 같이 바꾸는 것이 가독성에 더 좋을 것이다.
문자가 아닌 것은 특수문자와 공백이다.


String[] arr = s.split("[^\\p{Alpha}]+");



또한 삼항 연산자를 이용하여 본래 문자열이 그냥 "" 라면 0을 대입한다.
 s = ""  (빈문자열) 을 위의 조건으로 split을 하게 되면 s는 그 어떤 것으로도 쪼개지지가 않기 때문에 그 자체가 arr에 들어가게 된다. 
 arr 배열은 {""} 가 되고, length가 1이 되므로 빈 문자열은 계산에서 빼기 위하여 삼항연산자로 s가 빈문자열 일 때의 처리를 해준 것이다.




댓글 없음:

댓글 쓰기