Saya terinspirasi oleh kode Sean Patrick Floyd dan sedikit menulis ulang untuk kinerja maksimum yang saya dapatkan.
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 );
}
saya melakukan tes Kinerja untuk String yang sangat panjang dengan jumlah minimal dan hasilnya adalah:
- Kode asli lebih lambat 25,5%
- Pendekatan jambu biji lebih lambat 2,5-3 kali
- Ekspresi reguler dengan D + adalah 3-3,5 kali lebih lambat
- Ekspresi reguler dengan hanya D adalah 25+ kali lebih lambat
Tapi tergantung pada berapa lama string itu. Dengan string yang hanya berisi 6 angka jambu biji lebih lambat 50% dan regexp 1 kali lebih lambat