La fonction de comparaison des numéros de version est souvent nécessaire dans les systèmes impliquant le côté client, mais la comparaison des numéros de version ne peut pas être complètement utilisée en fonction des méthodes de comparaison de chaînes telles que Compareto;
Cela nous oblige à résumer les règles communes des numéros de version, à concevoir un algorithme de comparaison et à le résumer dans une méthode générale à utiliser:
Les numéros de version habituels sont: 1.3.20.8, 6.82.20160101, 8.5a / 8.5c, etc.;
La règle générale consiste à diviser d'abord la chaîne de version par numéro de point, puis à comparer la version principale avec la version principale et à comparer cette version avec cette version, afin qu'elle puisse être comparée une par une en séquence jusqu'à ce que la taille soit divisée;
Il convient de noter que de nombreuses méthodes de comparaison des numéros de version convertissent d'abord la chaîne en INT ou Double Type, ce qui peut ne pas être universel car il peut contenir des lettres, telles que 8,5 ° C;
La manière générale est de comparer la chaîne divisée en tant que chaîne, mais avant de comparer la chaîne, comparez le nombre de bits en premier;
Exemple d'une méthode pour comparer les numéros de version:
/ ** * Comparez la taille du numéro de version. Si le premier est grand, renvoyez un numéro positif, le second est grand et renvoie un nombre négatif, et si le même, renvoyez 0 * @param version1 * @param version2 * @return * / public static int compareversion (String version1, string version2) lance l'exception {if (version1 == null || version2 == null) {lance une nouvelle exception ("Compareversion Error: Illégal Params."); } String [] versionaRray1 = version1.split ("//.") ;// notez qu'il s'agit d'un match régulier, et". " ne peut pas être utilisé; String [] VersionArray2 = version2.split ("//."); int idx = 0; int minLength = math.min (versionaRray1.length, versionaRray2.Length); // Obtenez la valeur de longueur minimale int diff = 0; while (idx <minLength && (diff = versionaRray1 [idx] .length () - versionaRay2 [idx] .length ()) == 0 // Comparez la longueur d'abord && (diff = versionaRay1 [idx] .compareto (versionaRay2 [idx])) == 0) {// Comparez les caractères ++ idx; } // Si la taille a été divisée, elle sera retournée directement. Si la taille n'a pas été divisée, comparez à nouveau le nombre de bits. La sous-version du nombre est importante; diff = (diff! = 0)? Diff: VersionArray1.length - VersionArray2.Length; retour diff; } Remarque: le paramètre de méthode divisé est une expression correspondante régulière et ne peut pas être utilisée comme "." ("." ("." Pour correspondre à n'importe quelle valeur dans l'expression régulière). Vous devez utiliser "//." Pour être considéré comme divisé par numéro de point;
De cette façon, divisez d'abord en tableaux de sous-chaîne, puis comparez les numéros de subversion un par un. Lorsque vous comparez les numéros de subversion, comparez d'abord le nombre de chiffres. Si le nombre de chiffres est important, le nombre de chiffres sera important. Lorsque le nombre de chiffres est le même, comparez-vous en fonction de la méthode de comparaison des chaînes;
Si toutes les comparaisons sont terminées (l'un des numéros de version est comparé), alors regardez quel numéro de version a plus de numéros de subversion, c'est-à-dire la longueur du tableau divisé et les numéros de subversion sont plus grands;
De cette façon, diverses situations sont considérées comme plus approfondies et la taille du numéro de version est comparée; y compris les suffixes de lettres peut également être utilisé;
Par exemple, "9.9", "10.8.8.6", si vous comparez directement par chaîne, le premier sera plus grand et le second sera plus petit, ce qui est évidemment faux; Après la segmentation, les premières version 9 et 10 majeures sont comparées, et à partir des chiffres, le résultat sera important;
Par exemple, "9.9b", "9.8a", etc. sont également applicables, mais il n'est pas applicable si la méthode de conversion en int ou double est utilisée.