Heim  >  Artikel  >  Java  >  Wie implementiert man genaue Vergleiche von Versionszeichenfolgen in Java?

Wie implementiert man genaue Vergleiche von Versionszeichenfolgen in Java?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-16 07:39:03383Durchsuche

How to Implement Accurate Version String Comparisons in Java?

So vergleichen Sie Versionszeichenfolgen in Java genau

Der Vergleich von Versionsnummern in Java kann eine knifflige Aufgabe sein, insbesondere wenn die maximale Anzahl an Punkten erreicht ist Veröffentlichungen sind unbekannt. Während ein einfacher String-Vergleich mit „compareTo“ nicht ausreicht, ist eine benutzerdefinierte Lösung erforderlich, um diese Komplexität zu bewältigen.

Eine solche Lösung umfasst die Erstellung einer benutzerdefinierten Versionsklasse, die die Comparable-Schnittstelle implementiert. So geht es:

public class Version implements Comparable<Version> {

    private String version;

    public final String get() {
        return this.version;
    }

    public Version(String version) {
        if(version == null)
            throw new IllegalArgumentException("Version can not be null");
        if(!version.matches("[0-9]+(\.[0-9]+)*"))
            throw new IllegalArgumentException("Invalid version format");
        this.version = version;
    }

    @Override public int compareTo(Version that) {
        if(that == null)
            return 1;
        String[] thisParts = this.get().split("\.");
        String[] thatParts = that.get().split("\.");
        int length = Math.max(thisParts.length, thatParts.length);
        for(int i = 0; i < length; i++) {
            int thisPart = i < thisParts.length ?
                Integer.parseInt(thisParts[i]) : 0;
            int thatPart = i < thatParts.length ?
                Integer.parseInt(thatParts[i]) : 0;
            if(thisPart < thatPart)
                return -1;
            if(thisPart > thatPart)
                return 1;
        }
        return 0;
    }

    // ...
}

Die Version-Klasse besteht aus einem Konstruktor, der das Versionsformat validiert, und einer CompareTo-Methode, die zwei Instanzen basierend auf ihren Versionszeichenfolgen vergleicht. Die Methode „compareTo“ verarbeitet problemlos Nullwerte und teilt bei Nicht-Null-Werten die Versionszeichenfolgen in Teile auf und vergleicht sie einzeln.

Mit dieser benutzerdefinierten Klasse wird der Vergleich von Versionsnummern ganz einfach:

Version a = new Version("1.1");
Version b = new Version("1.1.1");
a.compareTo(b) == -1; // true

Diese Lösung führt zuverlässig Versionsvergleiche mit unterschiedlicher Anzahl von Point-Releases durch und gewährleistet so Genauigkeit und Konsistenz.

Das obige ist der detaillierte Inhalt vonWie implementiert man genaue Vergleiche von Versionszeichenfolgen in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn