programing

자바의 문자열에서 숫자를 추출합니다.

prostudy 2022. 5. 17. 21:51
반응형

자바의 문자열에서 숫자를 추출합니다.

나는 자바다String물건.나는 그것으로부터 유일한 숫자를 추출할 필요가 있다.나는 예를 들어 보죠:

"123-456-789"나는 되고 싶다."123456789"

있는 자리를 추출하는 라이브러리 함수 있나요?

대해 대답 감사합니다.전에 나는 이것들을 해 보면 추가 llibraries 설치하셔야 해 알아야 한다?

당신과 non-digits을 삭제하regex 사용할 수 있다.

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

그건 그렇고:그것은 0-9제외하고 많은 다른 chars을 나는 Character.isDigit(ch)사용되지 않았다.

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();
}

사용 구글 궈바:

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

업데이트:

Precomputed CharMatcher를 사용하여 더 성능이 향상됩니다.

CharMatcher ASCII_DIGITS=CharMatcher.inRange('0','9').precomputed();  
ASCII_DIGITS.retainFrom("123-456-789");
input.replaceAll("[^0-9?!\\.]","")

이것은 소수 점을 무시하겠지요.

사람들:로서 입력을 가지고 있다.445.3kg출력할 것이다445.3.

사용 구글 궈바:

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

CharMatcher고 꽤 흥미로운 사용, 예를 들면 다음을 수행합니다:plug-able 있다.

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);                 
}
public class FindDigitFromString 
{

    public static void main(String[] args) 
    {
        String s="  Hi How Are You 11  ";        
        String s1=s.replaceAll("[^0-9]+", "");
        //*replacing all the value of string except digit by using "[^0-9]+" regex.*
       System.out.println(s1);          
   }
}

출력:11

나는 코드 숀 패트릭 플로이드에 의해 좀 나는면 최대 성능을 다시 쓰도록 고무시켰다.

public static String stripNonDigitsV2( CharSequence input ) {
    if (input == null)
        return null;
    if ( input.length() == 0 )
        return "";

    char[] result = new char[input.length()];
    int cursor = 0;
    CharBuffer buffer = CharBuffer.wrap( input );

    while ( buffer.hasRemaining() ) {
        char chr = buffer.get();
        if ( chr > 47 && chr < 58 )
            result[cursor++] = chr;
    }

    return new String( result, 0, cursor );
}

저는 매우 긴 최소한의 숫자와 결과와 String:시험 Performance 한다.

  • 원본 코드 25,5% 느리다.
  • 궈바 접근은 2.53배 느려질 수 있다.
  • 대해 낙제점과 규칙적인 표현은 3-3.5배 느려질 수 있다.
  • 단지 D와 함께 규칙적인 표현은 25+배 느려질 수 있다.

그것이 얼마나 오래 이게 문자열에 달려 있다.문자열은 겨우 6수는 50% 느린 구아바고 1번씩 느리regexp을 포함하고 있다.

코틀린과 람다 표현을 사용하면 다음과 같이 할 수 있다.

val digitStr = str.filter { it.isDigit() }

사용할 수 있다str.replaceAll("[^0-9]", "");

전화번호 +9 (987) 124124에 대한 코드를 확정했다.

유니코드 문자는 4바이트를 차지한다.

public static String stripNonDigitsV2( CharSequence input ) {
    if (input == null)
        return null;
    if ( input.length() == 0 )
        return "";

    char[] result = new char[input.length()];
    int cursor = 0;
    CharBuffer buffer = CharBuffer.wrap( input );
    int i=0;
    while ( i< buffer.length()  ) { //buffer.hasRemaining()
        char chr = buffer.get(i);
        if (chr=='u'){
            i=i+5;
            chr=buffer.get(i);
        }

        if ( chr > 39 && chr < 58 )
            result[cursor++] = chr;
        i=i+1;
    }

    return new String( result, 0, cursor );
}

코드:

public class saasa {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String t="123-456-789";
        t=t.replaceAll("-", "");
        System.out.println(t);
    }
import java.util.*;
public class FindDigits{

 public static void main(String []args){
    FindDigits h=new  FindDigits();
    h.checkStringIsNumerical();
 }

 void checkStringIsNumerical(){
    String h="hello 123 for the rest of the 98475wt355";
     for(int i=0;i<h.length();i++)  {
      if(h.charAt(i)!=' '){
       System.out.println("Is this '"+h.charAt(i)+"' is a digit?:"+Character.isDigit(h.charAt(i)));
       }
    }
 }

void checkStringIsNumerical2(){
    String h="hello 123 for 2the rest of the 98475wt355";
     for(int i=0;i<h.length();i++)  {
         char chr=h.charAt(i);
      if(chr!=' '){
       if(Character.isDigit(chr)){
          System.out.print(chr) ;
       }
       }
    }
 }
}

참조URL: https://stackoverflow.com/questions/4030928/extract-digits-from-a-string-in-java

반응형