Я вдохновлен кодом Шона Патрика Флойда и немного переписал его для максимальной производительности, которую я получаю.
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 );
}
я делаю тест производительности на очень длинную строку с минимальными числами и результат:
- Оригинальный код медленнее на 25,5%
- Подход гуавы медленнее в 2,5-3 раза
- Регулярное выражение с D + в 3-3,5 раза медленнее
- Регулярное выражение только с D в 25+ раз медленнее
Кстати, это зависит от того, как долго эта строка. Со строкой, содержащей только 6 чисел, гуава на 50% медленнее и регулярное выражение в 1 раз медленнее