Tôi lấy cảm hứng từ mã Sean Patrick Floyd và ít viết lại nó để đạt hiệu suất tối đa tôi nhận được.
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 );
}
Tôi thực hiện kiểm tra Hiệu suất cho Chuỗi rất dài với số lượng tối thiểu và kết quả là:
- Mã gốc chậm hơn 25,5%
- Cách tiếp cận ổi chậm hơn 2,5-3 lần
- Biểu thức chính quy với D + chậm hơn 3-3,5 lần
- Biểu thức chính quy chỉ có D chậm hơn 25 lần
Btw nó phụ thuộc vào chuỗi đó dài bao nhiêu. Với chuỗi chỉ chứa 6 số là ổi chậm hơn 50% và chậm hơn 1 lần