Die Funktion des Vergleichs von Versionsnummern wird häufig in Systemen mit der Client -Seite benötigt. Der Vergleich von Versionsnummern kann jedoch nicht vollständig je nach Vergleichsmethoden wie Vergleiche verwendet werden.
Dies erfordert, dass wir die gemeinsamen Regeln von Versionsnummern zusammenfassen, einen Vergleichsalgorithmus entwerfen und in eine allgemeine Methode zusammenfassen:
Die üblichen Versionsnummern sind: 1.3.20.8, 6.82.20160101, 8,5a/8,5c usw.;
Die allgemeine Regel besteht darin, zuerst die Versionszeichenfolge nach der Punktnummer zu teilen, dann die Hauptversion mit der Hauptversion zu vergleichen und diese Version mit dieser Version zu vergleichen, damit sie nacheinander nach einer Sequenz verglichen werden kann, bis die Größe geteilt ist.
Es ist erwähnenswert, dass viele Methoden zum Vergleich von Versionsnummern die Zeichenfolge zuerst in INT oder Double Type konvertieren, was möglicherweise nicht universell ist, da sie Buchstaben wie 8,5C enthalten kann.
Die allgemeine Möglichkeit besteht darin, die geteilte Zeichenfolge als Zeichenfolge zu vergleichen, aber vor dem Vergleich der Zeichenfolge die Anzahl der Bits zuerst vergleichen.
Beispiel einer Methode zum Vergleich von Versionsnummern:
/*** Vergleichen Sie die Größe der Versionsnummer. Wenn ersterer groß ist, geben Sie eine positive Zahl zurück, letzterer ist groß und gibt eine negative Zahl zurück. Wenn dieselbe, geben Sie 0 * @param Version1 * @param Version2 * @Return */ public static int compareVersion (String Version1, String Version2) aus Ausnahme {if (Version1 == NULL || | } String [] VersionArray1 = Version1.split ("//.")// Beachten Sie, dass dies ein reguläres Spiel und" ". kann nicht verwendet werden; String [] VersionArray2 = Version2.split ("//."); int idx = 0; int minLength = math.min (VersionArray1.length, VersionArray2.Length); // Erhalten Sie den Wert minimaler Längenwert int diff = 0; while (idx <minLength && (diff = VersionArray1 [idx] .Length () - VersionArray2 [idx] .Length ()) == 0 // Vergleiche die Länge zuerst && (diff = VersionArray1 [idx] .Compareto (VersionArray2 [idx]) == 0) {// vergleiche die Zeichen ++ idx; } // Wenn die Größe geteilt wurde, wird sie direkt zurückgegeben. Wenn die Größe nicht geteilt wurde, vergleichen Sie die Anzahl der Bits erneut. Die Unterversion der Zahl ist groß; Diff = (Diff! = 0)? Diff: VersionArray1.Length - VersionArray2.Length; return diff; } HINWEIS: Der Parameter Split -Methode ist ein regulärer Matching -Ausdruck und kann nicht als "" verwendet werden. ("." (".", um jeden Wert im regulären Ausdruck zu entsprechen). Sie müssen "//" verwenden, um nach Punktzahl aufgeteilt zu werden;
Auf diese Weise teilen Sie zuerst in Substring -Arrays und vergleichen Sie dann die Subversionsnummern nacheinander. Vergleichen Sie beim Vergleich von Subversionszahlen zunächst die Anzahl der Ziffern. Wenn die Anzahl der Ziffern groß ist, ist die Anzahl der Ziffern groß. Wenn die Anzahl der Ziffern gleich ist, vergleichen Sie dann gemäß der String -Vergleichsmethode.
Wenn alle Vergleiche abgeschlossen sind (eine der Versionsnummern wird verglichen), schauen Sie sich an, welche Versionsnummer mehr Subversionsnummern enthält, dh die Länge des geteilten Arrays und die Subversionsnummern sind größer.
Auf diese Weise werden verschiedene Situationen gründlicher betrachtet und die Versionsnummerngröße verglichen. einschließlich Buchstabensuffixe kann auch verwendet werden.
Zum Beispiel "9.9", "10.8.8.6", wenn Sie direkt mit String vergleichen, ist ersterer größer und der letztere ist kleiner, was offensichtlich falsch ist. Nach der Segmentierung werden die ersten großen Version 9 und 10 verglichen, und aus den Ziffern wird das Ergebnis groß sein.
Zum Beispiel sind "9,9b", "9,8a" usw. ebenfalls anwendbar, ist jedoch nicht anwendbar, wenn die Methode zur Konvertierung in int oder doppelt verwendet wird.