Saya telah melihat pertanyaan tentang bagaimana cara mengawali angka nol di sini di SO. Tapi tidak sebaliknya!
Bisakah kalian menyarankan saya cara menghapus nol terkemuka dalam teks alfanumerik? Apakah ada API bawaan atau apakah saya perlu menulis metode untuk memangkas nol terkemuka?
Contoh:
01234 converts to 1234
0001234a converts to 1234a
001234-a converts to 1234-a
101234 remains as 101234
2509398 remains as 2509398
123z remains as 123z
000002829839 converts to 2829839
java
string
alphanumeric
jai
sumber
sumber
.replaceFirst("^0+(?!$)".toRegex(), "")
Anda dapat menggunakan kelas StringUtils dari Apache Commons Lang seperti ini:
sumber
Bagaimana dengan cara regex:
The
^
jangkar ke awal dari string (aku mengasumsikan dari konteks string Anda tidak multi-line di sini, jika Anda mungkin perlu untuk melihat ke dalam\A
untuk memulai input daripada awal baris). The0*
berarti nol atau lebih0
karakter (Anda bisa menggunakan0+
juga). ThereplaceFirst
hanya menggantikan semua0
karakter di awal dengan apa-apa.Dan jika, seperti Vadzim, definisi Anda tentang angka nol di depan tidak termasuk mengubah
"0"
(atau"000"
string serupa) menjadi string kosong (harapan yang cukup rasional), cukup masukkan kembali jika perlu:sumber
Cara yang jelas tanpa perlu regExp dan perpustakaan eksternal.
sumber
Agar sesuai dengan jawaban Apache Commons pertama: menggunakan jambu-libraries ( pustaka utilitas Java untuk tujuan umum Google yang menurut saya sekarang harus berada di classpath dari setiap proyek Java non-sepele), ini akan menggunakan CharMatcher :
sumber
Jika Anda menggunakan Kotlin Ini adalah satu-satunya kode yang Anda butuhkan:
sumber
Anda bisa melakukannya:
String s = Integer.valueOf("0001007").toString();
sumber
Gunakan
StringUtils
kelas Apache Commons :sumber
Gunakan ini:
sumber
Menggunakan Regexp dengan grup:
sumber
Menggunakan regex sebagai beberapa jawaban menyarankan adalah cara yang baik untuk melakukan itu. Jika Anda tidak ingin menggunakan regex maka Anda dapat menggunakan kode ini:
sumber
String
... gunakan pendekatan magiccrafter sebagai gantinya.Saya pikir itu sangat mudah untuk dilakukan. Anda hanya dapat mengulangi string dari awal dan menghapus nol sampai Anda menemukan char tidak nol.
sumber
Jika Anda (seperti saya) perlu menghapus semua nol terkemuka dari setiap "kata" dalam sebuah string, Anda dapat memodifikasi jawaban @polygenelubricants sebagai berikut:
yang mengakibatkan:
sumber
Tanpa menggunakan
Regex
atausubstring()
fungsiString
yang tidak efisien -sumber
Anda bisa mengganti
"^0*(.*)"
ke"$1"
dengan regexsumber
sumber
Jika Anda tidak ingin menggunakan regex atau perpustakaan eksternal. Anda dapat melakukannya dengan "untuk":
sumber
String
dihasilkan selama loop ini ... jika ada 10000
...Saya membuat beberapa tes benchmark dan menemukan, bahwa cara tercepat (sejauh ini) adalah solusi ini:
Terutama ekspresi reguler sangat lambat dalam iterasi yang panjang. (Saya perlu mencari tahu cara tercepat untuk melakukan batchjob.)
sumber
Dan bagaimana dengan hanya mencari karakter non-nol pertama?
Regex ini menemukan digit pertama antara 1 dan 9 diikuti oleh sejumlah digit, jadi untuk "00012345" ia mengembalikan "12345" . Itu dapat dengan mudah diadaptasi untuk string alfanumerik.
sumber