Saya punya String
objek Java . Saya perlu mengekstraksi hanya digit dari itu. Saya akan memberi contoh:
"123-456-789"
saya ingin "123456789"
Apakah ada fungsi perpustakaan yang mengekstrak hanya digit?
Terima kasih atas jawabannya. Sebelum saya mencoba ini, saya perlu tahu apakah saya harus menginstal perpustakaan tambahan?
str = str.replaceAll("[^\\.0123456789]","");
(?!\\.)
Inilah solusi yang lebih bertele-tele. Kurang anggun, tapi mungkin lebih cepat:
Kode Tes:
Keluaran:
BTW: Saya tidak menggunakan Character.isDigit (ch) karena menerima banyak karakter lain kecuali 0 - 9.
sumber
StringBuilder
konstruktor (sepertiinput.length()
) untuk memastikan bahwa itu tidak perlu realokasi. Anda tidak perlu menuntut diString
sini;CharSequence
cukup. Anda juga dapat memisahkan alokasi dariStringBuilder
koleksi non-digit dengan menulis fungsi terpisah yang menerimaCharSequence
input as danAppendable
instance sebagai akumulator output.sumber
Menggunakan Google Guava:
MEMPERBARUI:
Menggunakan Precomputed CharMatcher dapat lebih meningkatkan kinerja
sumber
Charmatcher.DIGIT
ditentukan sebelumnya.Ini akan mengabaikan poin desimal.
misalnya: jika Anda memiliki input sebagai
445.3kg
output445.3
.sumber
Menggunakan Google Guava:
CharMatcher dapat dipasang dan cukup menarik untuk digunakan, misalnya Anda dapat melakukan hal berikut:
output == 123-456-789
sumber
Gunakan persamaan reguler untuk memenuhi kebutuhan Anda.
sumber
Saya terinspirasi oleh kode Sean Patrick Floyd dan sedikit menulis ulang untuk kinerja maksimum yang saya dapatkan.
saya melakukan tes Kinerja untuk String yang sangat panjang dengan jumlah minimal dan hasilnya adalah:
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
sumber
Output: 11
sumber
Kamu bisa memakai
str.replaceAll("[^0-9]", "");
sumber
Saya telah menyelesaikan kode untuk nomor telepon +9 (987) 124124.
Karakter Unicode menempati 4 byte.
sumber
Kode:
sumber
sumber