Inspirei-me no código Sean Patrick Floyd e pouco o reescrevi para obter o máximo desempenho que recebo.
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 );
}
Eu faço o teste de desempenho para uma string muito longa com números mínimos e o resultado é:
- O código original é 25,5% mais lento
- A abordagem da goiaba é 2,5-3 vezes mais lenta
- A expressão regular com D + é 3-3,5 vezes mais lenta
- Expressão regular com apenas D é 25 vezes mais lenta
Btw depende de quanto tempo essa cadeia é. Com uma string que contém apenas 6 números, a goiaba é 50% mais lenta e a regexp 1 vezes mais lenta