Fungsi membandingkan angka versi sering diperlukan dalam sistem yang melibatkan sisi klien, tetapi membandingkan angka versi tidak dapat digunakan sepenuhnya sesuai dengan metode perbandingan string seperti compareto;
Ini mengharuskan kita untuk merangkum aturan umum nomor versi, merancang algoritma perbandingan dan merangkumnya menjadi metode umum untuk digunakan:
Nomor versi yang biasa adalah: 1.3.20.8, 6.82.20160101, 8.5a/8.5c, dll.;
Aturan umum adalah untuk terlebih dahulu membagi string versi dengan nomor dot, kemudian membandingkan versi utama dengan versi utama, dan membandingkan versi ini dengan versi ini, sehingga dapat dibandingkan satu per satu secara berurutan sampai ukurannya dibagi;
Perlu dicatat bahwa banyak metode untuk membandingkan nomor versi mengonversi string ke int atau ganda tipe terlebih dahulu, yang mungkin tidak universal karena mungkin berisi huruf, seperti 8.5c;
Cara umum adalah membandingkan string yang dibagi sebagai string, tetapi sebelum membandingkan string, membandingkan jumlah bit terlebih dahulu;
Contoh metode untuk membandingkan nomor versi:
/*** Bandingkan ukuran nomor versi. Jika yang pertama besar, kembalikan angka positif, yang terakhir besar dan mengembalikan angka negatif, dan jika sama, return 0 * @param version1 * @param Version2 * @return */ public int compareVersion (string version1, string version2) melempar pengecualian {if (versi1 == null || version2 == null) {throw New Exception {if (version1 == null || version2 == null) {throw throw {if (version1 == null || version2 == null) {throw null) {throw throw {if (version1 = } String [] versiArray1 = version1.split ("//.");// Perhatikan bahwa ini adalah pertandingan reguler, dan". " tidak dapat digunakan; String [] versiArray2 = version2.split ("//."); int idx = 0; int minlength = math.min (versiArray1.length, versiArray2.length); // Dapatkan nilai panjang minimum int diff = 0; while (idx <minLength && (Diff = VersiArray1 [idx] .length () - VersiArray2 [idx] .length ()) == 0 // Bandingkan panjang pertama && (Diff = VersiArray1 [IDX] .compareto (VersiArray2 [IDX])) == 0) {// Bandingkan karakter ++ idx; } // Jika ukurannya telah dibagi, itu akan dikembalikan secara langsung. Jika ukurannya belum dibagi, maka bandingkan jumlah bit lagi. Sub-versi angka besar; Diff = (Diff! = 0)? Diff: VersiArray1.length - VersiArray2.length; return diff; } Catatan: Parameter metode split adalah ekspresi pencocokan reguler, dan tidak dapat digunakan sebagai "." ("." ("." Untuk mencocokkan nilai apa pun dalam ekspresi reguler). Anda perlu menggunakan "//." Dianggap dibagi berdasarkan nomor poin;
Dengan cara ini, pertama -tama membagi menjadi array substring, dan kemudian membandingkan angka subversi satu dengan satu. Saat membandingkan angka subversi, pertama bandingkan jumlah digit. Jika jumlah angka besar, jumlah angka akan besar. Ketika jumlah digitnya sama, maka bandingkan sesuai dengan metode perbandingan string;
Jika semua perbandingan selesai (salah satu nomor versi dibandingkan), maka lihat nomor versi mana yang memiliki lebih banyak angka subversi, yaitu, panjang array yang terbagi, dan angka subversi lebih besar;
Dengan cara ini, berbagai situasi dianggap lebih menyeluruh dan ukuran nomor versi dibandingkan; termasuk sufiks surat juga dapat digunakan;
Misalnya, "9.9", "10.8.8.6", jika Anda membandingkan secara langsung dengan string, yang pertama akan lebih besar dan yang terakhir akan lebih kecil, yang jelas salah; Setelah segmentasi, versi utama 9 dan 10 pertama dibandingkan, dan dari angka, hasilnya akan besar;
Misalnya, "9.9b", "9.8a", dll. Juga berlaku, tetapi tidak berlaku jika metode konversi ke int atau ganda digunakan.