A função de comparar números de versão geralmente é necessária em sistemas envolvendo o lado do cliente, mas a comparação de números de versão não pode ser usada completamente de acordo com métodos de comparação de strings, como compareto;
Isso exige que resumamos as regras comuns de números de versão, projete um algoritmo de comparação e o encapsulamos em um método geral para usar:
Os números usuais da versão são: 1.3.20.8, 6.82.20160101, 8.5a/8.5c, etc.;
A regra geral é primeiro dividir a string da versão por número de pontos, depois comparar a versão principal com a versão principal e comparar esta versão com esta versão, para que ela possa ser comparada uma por uma em sequência até que o tamanho seja dividido;
Vale a pena notar que muitos métodos de comparação de números de versão convertem a sequência para INT ou Double Type primeiro, o que pode não ser universal porque pode conter letras, como 8.5c;
A maneira geral é comparar a sequência dividida como uma string, mas antes de comparar a string, compare o número de bits primeiro;
Exemplo de um método para comparar números de versão:
/*** Compare o tamanho do número da versão. Se o primeiro for grande, retorne um número positivo, o último é grande e retorna um número negativo e, se o mesmo, retorne 0 * @param versão1 * @param versão2 * @return */ public static int compareversion (string versão1, string versão2) lança a exceção {if (versão1 == null |hulshershersher2 == Null) {Throw); } String [] VersionArray1 = Version1.split ("//.") ;// Observe que esta é uma correspondência regular e" "." não pode ser usado; String [] versionArray2 = versão2.split ("//."); int idx = 0; int minLength = Math.min (VersionArray1.Length, VersionArray2.Length); // Obtenha o valor mínimo do comprimento int diff = 0; while (idx <minlength && (diff = versionArray1 [idx] .Length () - VersionArray2 [idx] .Length ()) == 0 // compare o comprimento primeiro && (diff = VersionArray1 [idx] .compareTo (versionArray2 [idx]) == 0) {// compare o caractere+; } // Se o tamanho tiver sido dividido, ele será retornado diretamente. Se o tamanho não tiver sido dividido, compare o número de bits novamente. A sub-versão do número é grande; diff = (diff! = 0)? DIFF: VersionArray1.Length - VersionArray2.Length; retornar diff; } Nota: O parâmetro do método dividido é uma expressão de correspondência regular e não pode ser usada como "". ("." ("." Para corresponder a qualquer valor na expressão regular). Você precisa usar "//." Para ser considerado dividido pelo número do ponto;
Dessa forma, primeiro divida em matrizes de substring e compare os números de subversão um por um. Ao comparar os números de subversão, compare primeiro o número de dígitos. Se o número de dígitos for grande, o número de dígitos será grande. Quando o número de dígitos é o mesmo, compare de acordo com o método de comparação de string;
Se todas as comparações forem concluídas (um dos números da versão for comparado), consulte qual número da versão possui mais números de subversão, ou seja, o comprimento da matriz dividida e os números de subversão são maiores;
Dessa forma, várias situações são consideradas mais minuciosamente e o tamanho do número da versão é comparado; incluindo sufixos de cartas também podem ser usados;
Por exemplo, "9.9", "10.8.8.6", se você comparar diretamente por string, o primeiro será maior e o último será menor, o que está obviamente errado; Após a segmentação, a primeira grande versão 9 e 10 são comparadas e, a partir dos dígitos, o resultado será grande;
Por exemplo, "9.9b", "9.8a", etc. também são aplicáveis, mas não for aplicável se o método de conversão para int ou duplo for usado.