Maison > Java > javaDidacticiel > Comment implémenter des comparaisons précises de chaînes de versions en Java ?

Comment implémenter des comparaisons précises de chaînes de versions en Java ?

Mary-Kate Olsen
Libérer: 2024-11-16 07:39:03
original
479 Les gens l'ont consulté

How to Implement Accurate Version String Comparisons in Java?

Comment comparer les chaînes de version avec précision en Java

Comparer les numéros de version en Java peut être une tâche délicate, surtout lorsque le nombre maximum de points les versions sont inconnues. Bien qu'une simple comparaison de chaînes à l'aide de compareTo soit insuffisante, une solution personnalisée est nécessaire pour gérer cette complexité.

L'une de ces solutions consiste à créer une classe Version personnalisée qui implémente l'interface Comparable. Voici comment procéder :

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;
    }

    // ...
}
Copier après la connexion

La classe Version se compose d'un constructeur qui valide le format de la version et d'une méthode compareTo qui compare deux instances en fonction de leurs chaînes de version. La méthode compareTo gère gracieusement les valeurs nulles et, pour les valeurs non nulles, elle divise les chaînes de version en parties, en les comparant une par une.

En utilisant cette classe personnalisée, comparer les numéros de version devient simple :

Version a = new Version("1.1");
Version b = new Version("1.1.1");
a.compareTo(b) == -1; // true
Copier après la connexion

Cette solution gère de manière fiable les comparaisons de versions avec un nombre variable de versions ponctuelles, garantissant ainsi précision et cohérence.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal