Me inspiré en el código Sean Patrick Floyd y lo reescribí poco para obtener el máximo rendimiento que obtengo.
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 );
}
Hago una prueba de rendimiento a una cadena muy larga con números mínimos y el resultado es:
- El código original es un 25,5% más lento
- El enfoque de la guayaba es 2.5-3 veces más lento
- La expresión regular con D + es 3-3.5 veces más lenta
- La expresión regular con solo D es 25 veces más lenta
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