Java - 문자열(String)에서 숫자(int)만 추출하는 방법

JS · 04 Apr 2020

문자열(String)에서 숫자(int)만 추출하는 방법 여러가지 방법이 있습니다.

  • 정규표현식을 이용하여 숫자 추출
  • for문으로 숫자 추출
  • Stream을 이용하여 숫자 추출

가장 쉬운 방법은 정규표현식(Regex)를 이용하는 방법입니다. 위에 열거한 방법들을 예제와 함께 알아보겠습니다.

정규표현식으로 Integer 추출

다음 코드는 정규표현식으로 Integer만 추출하는 코드입니다. replaceAll()에 인자로 정규표현식과 변환할 문자열을 전달합니다.

String str = "aaa1234, ^&*2233pp";
String intStr = str.replaceAll("[^0-9]", "");
System.out.println(intStr);
// output: 12342233

"[^0-9]"는 0~9의 숫자가 아닌 문자열을 의미합니다.

따라서, 숫자가 아닌 문자들을 공백("")으로 변경하라는 의미입니다.

다음 코드도 위와 동일한 결과를 출력합니다. "^\\d""[^0-9]"의 축약형으로 의미가 동일합니다.

String str = "aaa1234, ^&*2233pp";
String intStr = str.replaceAll("[^\\d]", "");
System.out.println(intStr);
// output: 12342233

이 방법이 가장 코드가 짧으니 이 방법을 사용하는 것이 좋습니다.

정규표현식에 대해서 자세히 알고 싶다면 Java - 정규표현식(regex) 예제를 참고하세요.

for문으로 숫자 추출

다음 코드는 for문으로 Integer만 추출하는 코드입니다.

String str = "aaa1234, ^&*2233pp";
String intStr = "";
for (int i = 0; i < str.length(); i++) {
    char ch = str.charAt(i);
    if (48 <= ch && ch <= 57) {
        intStr += ch;
    }
}
System.out.println(intStr);
// output: 12342233

48은 ASCII에서 숫자 0을 의미하고, 57은 ASCII에서 숫자 9를 의미합니다. 즉, 문자열에서 0~9 사이의 숫자만 추출하는 코드입니다.

Stream으로 숫자 추출

다음 코드는 Stream으로 숫자를 추출하는 코드입니다. for문과 알고리즘은 동일합니다. 대신 for를 사용하지 않고 Stream을 사용하여 처리하였습니다.

String str = "aaa1234, ^&*2233pp";
IntStream stream = str.chars();
String intStr = stream.filter((ch)-> (48 <= ch && ch <= 57))
        .mapToObj(ch -> (char)ch)
        .map(Object::toString)
        .collect(Collectors.joining());
System.out.println(intStr);
// output: 12342233

참고