String.replaceAll()과 정규표현식을 이용하여 문자열에서 숫자 추출하는 방법입니다.

1. 정규표현식으로 숫자만 추출

String.replaceAll(pattern, replacement)는 문자열에서 pattern에 해당하는 문자들을 replacement로 교체합니다.

따라서, 패턴으로 숫자가 아닌 문자를 찾고 빈 문자열("")으로 변환하면 문자열에 숫자만 남게 됩니다.

아래 예제의 pattern [^0-9]는 0에서 9사이의 숫자가 아닌 문자를 의미합니다.

public class Example {
    public static void main(String[] args) {

        String str = "a1b2c3 pp45$6#789";

        String result = str.replaceAll("[^0-9]","");
        System.out.println(result);
    }
}

Output:

123456789

[0-9]는 0에서 9 사이의 숫자를 의미하며, ^는 NOT을 의미합니다. 따라서 [^0-9]는 0~9 사이의 숫자가 아닌 문자를 의미합니다.

2. 다른 정규표현식 패턴

패턴 \\D는 숫자가 아닌 문자를 의미합니다.

아래와 같이 숫자를 제외한 문자를 제거할 수 있습니다.

String str = "a1b2c3 pp45$6#789";
String result = str.replaceAll("[\\D]","");
System.out.println(result);

3. 다른 정규표현식 패턴

패턴 \\d는 숫자를 의미하며, ^는 NOT을 의미합니다.

즉, ^\\d는 숫자가 아닌 문자를 의미하며, 아래와 같이 숫자만 추출할 수 있습니다.

String str = "a1b2c3 pp45$6#789";
String result = str.replaceAll("[^\\d]","");
System.out.println(result);

4. 숫자 문자열을 Integer / Long으로 변환

숫자만 있는 문자열을 Integer.parseInt(), Long.parseLong()으로 Integer/Long 타입으로 변경할 수 있습니다.

public class Example {
    public static void main(String[] args) {

        String str = "0a1b2c3 pp45$6#789";

        String result = str.replaceAll("[^\\d]","");
        System.out.println(result);

        int n1 = Integer.parseInt(result);
        long n2 = Long.parseLong(result);
        System.out.println(n1);
        System.out.println(n2);
    }
}

Output:

0123456789
123456789
123456789