Tengo un Stringobjeto Java Necesito extraer solo dígitos de él. Daré un ejemplo:
"123-456-789" quiero "123456789"
¿Existe una función de biblioteca que extrae solo dígitos?
Gracias por las respuestas Antes de probar esto, ¿debo saber si tengo que instalar alguna biblioteca adicional?

str = str.replaceAll("[^\\.0123456789]","");(?!\\.)Aquí hay una solución más detallada. Menos elegante, pero probablemente más rápido:
Código de prueba:
Salida:
Por cierto: no utilicé Character.isDigit (ch) porque acepta muchos otros caracteres, excepto 0 - 9.
fuente
StringBuilderconstructor (comoinput.length()) para asegurarse de que no sea necesario reasignarlo. No necesita exigir unStringaquí;CharSequencees suficiente Además, puede separar la asignación de laStringBuildercolección de no dígitos escribiendo una función separada que acepte unaCharSequenceentrada y unaAppendableinstancia como un acumulador de salida.fuente
Usando Google Guava:
ACTUALIZAR:
El uso de CharMatcher precalculado puede mejorar aún más el rendimiento
fuente
Charmatcher.DIGITpredefinido.Esto ignorará los puntos decimales.
por ejemplo: si tiene una entrada como
445.3kgserá la salida445.3.fuente
Usando Google Guava:
CharMatcher es conectable y bastante interesante de usar, por ejemplo, puede hacer lo siguiente:
salida == 123-456-789
fuente
Use expresiones regulares para cumplir con sus requisitos.
fuente
Me inspiré en el código Sean Patrick Floyd y lo reescribí poco para obtener el máximo rendimiento que obtengo.
Hago una prueba de rendimiento a una cadena muy larga con números mínimos y el resultado es:
Por cierto, depende de la longitud de esa cadena. Con una cuerda que contiene solo 6 números, la guayaba es 50% más lenta y la expresión regular 1 veces más lenta
fuente
Salida: 11
fuente
Puedes usar
str.replaceAll("[^0-9]", "");fuente
He finalizado el código para los números de teléfono +9 (987) 124124.
Los caracteres Unicode ocupan 4 bytes.
fuente
Código:
fuente
fuente