문자열 내에서 숫자만 분리하기

String 클래스의 split 함수와 정규표현식을 이용해서 문자열 내에 들어 있는 숫자들만 추려보자. 

자바 소스를 보면 String.split() 메쏘드는 내부적으로 Pattern클래스의 split 메쏘드를 사용한다. 즉, 사용자가 Pattern 클래스를 이용하지 않고 사용하기 편하게 만들어 놓았을 뿐.
    public String[] split(String regex, int limit) {
return Pattern.compile(regex).split(this, limit);
    }

    public String[] split(String regex) {
        return split(regex, 0);
    }

예제 코드를 보자.
    @Test
    public void split() {
        String text = "blah 11 per day 22 abc 33";
        String[] split = text.split("\\D+");
        assertEquals("", split[0]);    // 주의!
        assertEquals("11", split[1]);
        assertEquals("22", split[2]);
        assertEquals("33", split[3]);
    }

정규표현식 \D 는 숫자가 아닌 문자(A non-digit: [^0-9])를 뜻한다. 

(http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html 참고)

따라서 \D+는 숫자가 아닌 문자열들을 토큰으로 스트링을 잘라내게 된다.


주의) split 함수가 리턴하는 문자열 배열의 첫번째 원소의 값은 공백문자("")가 된다. "11"을 만나기 전까지의 문자 "blah "문자를 잘라내고 남는 문자를 배열 요소에 담기 때문.


추가) 마찬가지로 만약 숫자를 제외한 문자들만 뽑아내고 싶다면 \d+ 를 쓰면 된다.


저작자 표시 비영리 변경 금지
신고

티스토리 툴바