Wie vergleichen Sie zwei Versionsstrings in Java?
Gibt es ein standard-idiom für den Vergleich von Versionsnummern? Ich kann nicht einfach eine gerade Schnur compareTo weil ich noch nicht weiß, was die maximale Anzahl von Punkt-releases wird es werden. Ich muss vergleichen Sie die Versionen und habe Folgendes zutreffen:
1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10
InformationsquelleAutor der Frage Bill the Lizard | 2008-10-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Tokenisierung der strings mit dem Punkt als Trennzeichen und dann vergleichen Sie die integer-übersetzung nebeneinander, von Links beginnend.
InformationsquelleAutor der Antwort gizmo
Andere Lösung für dieses alte post (für die, die es helfen könnte) :
Edit:
@daiscog: ich Danke Ihnen für Ihre Bemerkung, dieses Stück code wurde entwickelt für die Android-Plattform und wie von Google empfohlen, die Methode "matches" überprüfen der gesamten Zeichenfolge im Gegensatz zu Java verwendet, die eine regulatorische Muster. (Android-Dokumentation - JAVA-Dokumentation)
InformationsquelleAutor der Antwort alex
Es ist wirklich einfach mit Maven:
Können Sie die richtige Abhängigkeit string für Maven-Artefakt aus auf dieser Seite:
InformationsquelleAutor der Antwort Alex Dean
Die Sie benötigen, um die Normalisierung der version-strings, so dass Sie verglichen werden können. So etwas wie
Drucke
InformationsquelleAutor der Antwort Peter Lawrey
Die besten, um die Wiederverwendung von vorhandenen code,
nehmen Maven ist ComparableVersion Klasse
Vorteile:
Beinhalten keine Abhängigkeiten zu maven-Artefakt, wie Sie verschiedene transitive Abhängigkeiten
InformationsquelleAutor der Antwort Ryszard Perkowski
Beispiel:
Ausgabe:
InformationsquelleAutor der Antwort Markus Jarderot
Fragen, warum jeder meint, dass die Versionen, die nur aus ganzen zahlen - in meinem Fall war es nicht.
Warum das Rad neu erfinden (vorausgesetzt, die version folgt den Semver standard)
Ersten installieren https://github.com/vdurmont/semver4j über Maven
Dann verwenden Sie diese Bibliothek
InformationsquelleAutor der Antwort Alex
InformationsquelleAutor der Antwort Algorithmatic
InformationsquelleAutor der Antwort Cenk Alti
für meine Projekte nutze ich meine commons-version der library https://github.com/raydac/commons-version
es enthält zwei zusätzliche Klassen - to parse version (version analysiert werden können im Vergleich mit einer anderen version Objekts, da es vergleichbar ist) und VersionValidator die es erlaubt, zu überprüfen version für einige expression wie
!=ide-1.1.1,>idea-1.3.4-SNAPSHOT;<1.2.3
InformationsquelleAutor der Antwort Igor Maznitsa
Ich erstellt einfache Dienstprogramm für den Vergleich von Versionen auf Android-Plattform mit Semantic Versioning Konvention. Also es funktioniert nur für die Zeichenfolgen im format X. Y. Z (Major.Moll.Patch), wo X, Y, und Z nicht-negative Ganzzahlen. Sie finden es auf meiner GitHub.
Methode Version.compareVersions(String v1, String v2) vergleicht zwei version-strings. Es gibt 0 zurück, wenn die Versionen gleich sind, 1 wenn Sie die version v1 ist vor der version v2, -1, wenn die version v1 ist ab version v2, -2 wenn die version-format ist ungültig.
InformationsquelleAutor der Antwort petrnohejl
Ausgabe:
InformationsquelleAutor der Antwort Stan Towianski
Für Scala können Sie eine Bibliothek, die ich gemacht habe: https://github.com/kypeli/sversion
InformationsquelleAutor der Antwort Johan Paul
Schrieb eine kleine Funktion selbst.Einfacher Mit Listen
InformationsquelleAutor der Antwort Arpan Sharma
Lassen Sie uns ehrlich sein,
String
lexikographische Vergleich funktioniert ziemlich gut für die meisten der Fall.Gibt es einige Fehler möglich, wenn zum Beispiel wir haben einige Formatierungen in einer version
Diese korrigiert werden können, ganz einfach durch die Reinigung werden diese Werte und natürlich bietet einige einfache Methoden.
Regex entfernen, entfernen Sie die führenden
0
wenn nötig.Dies erlaubt uns einen ziemlich einfachen Vergleich mit dem, was existe schon.
Einen quick-test-Fall entnommen Johan Paul ' s Antwort
InformationsquelleAutor der Antwort AxelH
Hier ist eine optimierte Implementierung:
Ergebnis:
InformationsquelleAutor der Antwort ballzak
Diesen code zu beheben, diese Art von Vergleich-Versionen.
InformationsquelleAutor der Antwort gorums
Mochte ich die Idee von @Peter Lawrey, Und ich erweiterte es um weitere Grenzen :
Hoffe, es hilft jemand. Es bestanden alle test Fälle, in interviewbit und leetcode (müssen kommentieren Sie zwei Zeilen in der Funktion compareVersion).
Leicht getestet !
InformationsquelleAutor der Antwort Abhinav Puri
InformationsquelleAutor der Antwort sfrizvi6
Meine java-Lösung
InformationsquelleAutor der Antwort Ajay Partap Singh