我有一个Java字符串对象。我只需要从中提取数字。我举个例子:

123456-789我要123456789

是否存在只提取数字的库函数?

谢谢你的回答。在我尝试这些之前,我需要知道我是否必须安装任何额外的llibraries?


当前回答

使用谷歌番石榴:

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

更新:

使用Precomputed CharMatcher可以进一步提高性能

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

其他回答

您可以使用正则表达式和删除非数字。

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

我已经确定了电话号码+9(987)124124的代码。

Unicode字符占用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 );
}

你可以使用str.replaceAll("[^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();
}
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