Я надихнувся кодом Шона Патріка Флойда і трохи переписав його для досягнення максимальної продуктивності.
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 раз повільніше