[java] Java에서 문자열에서 숫자 추출

Java String객체가 있습니다. 숫자 만 추출해야합니다. 예를 들어 보겠습니다.

"123-456-789" 내가 원하는 "123456789"

숫자 만 추출하는 라이브러리 함수가 있습니까?

답변 주셔서 감사합니다. 시험해보기 전에 추가 llibraries를 설치해야하는지 알아야합니까?



답변

정규식을 사용하고 숫자가 아닌 숫자를 삭제할 수 있습니다.

str = str.replaceAll("\\D+","");


답변

더 자세한 해결책은 다음과 같습니다. 덜 우아하지만 아마도 더 빠를 것입니다.

public static String stripNonDigits(
            final CharSequence input /* inspired by seh's comment */){
    final StringBuilder sb = new StringBuilder(
            input.length() /* also inspired by seh's comment */);
    for(int i = 0; i < input.length(); i++){
        final char c = input.charAt(i);
        if(c > 47 && c < 58){
            sb.append(c);
        }
    }
    return sb.toString();
}

테스트 코드 :

public static void main(final String[] args){
    final String input = "0-123-abc-456-xyz-789";
    final String result = stripNonDigits(input);
    System.out.println(result);
}

산출:

0123456789

BTW : Character.isDigit (ch) 는 0-9를 제외한 많은 다른 문자를 허용하기 때문에 사용하지 않았습니다 .


답변

public String extractDigits(String src) {
    StringBuilder builder = new StringBuilder();
    for (int i = 0; i < src.length(); i++) {
        char c = src.charAt(i);
        if (Character.isDigit(c)) {
            builder.append(c);
        }
    }
    return builder.toString();
}


답변

Google Guava 사용 :

CharMatcher.inRange('0','9').retainFrom("123-456-789")

최신 정보:

사전 계산 된 CharMatcher를 사용 하면 성능을 더욱 향상시킬 수 있습니다

CharMatcher ASCII_DIGITS=CharMatcher.inRange('0','9').precomputed();
ASCII_DIGITS.retainFrom("123-456-789");


답변

input.replaceAll("[^0-9?!\\.]","")

소수점을 무시합니다.

예를 들면 : 당신은 같은 입력이 있으면 445.3kg출력이됩니다 445.3.


답변

Google Guava 사용 :

CharMatcher.DIGIT.retainFrom("123-456-789");

CharMatcher는 플러그 가능하고 사용하기 매우 흥미 롭습니다. 예를 들어 다음을 수행 할 수 있습니다.

String input = "My phone number is 123-456-789!";
String output = CharMatcher.is('-').or(CharMatcher.DIGIT).retainFrom(input);

출력 == 123-456-789


답변

정규식을 사용하여 요구 사항에 맞 춥니 다.

String num,num1,num2;
String str = "123-456-789";
String regex ="(\\d+)";
Matcher matcher = Pattern.compile( regex ).matcher( str);
while (matcher.find( ))
{
num = matcher.group();
System.out.print(num);
}