Функция сравнения номеров версий часто необходима в системах, включающих клиентскую сторону, но сравнение номеров версий не может быть полностью использовано в соответствии с методами сравнения строк, таких как сравнение;
Это требует от нас суммирования общих правил номеров версий, разработать алгоритм сравнения и инкапсулировать его в общий метод для использования:
Обычные номера версий: 1.3.20.8, 6.82.20160101, 8.5a/8.5c и т. Д.;
Общее правило состоит в том, чтобы сначала разделить строку версии по номеру DOT, затем сравнить основную версию с основной версией и сравнить эту версию с этой версией, чтобы ее можно сравнить по одному в последовательности, пока размер не будет разделен;
Стоит отметить, что многие методы сравнения номеров версий конвертируют строку в первой или двойной тип, что может быть не универсальным, поскольку она может содержать буквы, такие как 8.5c;
Общий способ состоит в том, чтобы сравнить разделенную строку как строку, но перед сравнением строки сначала сравните количество битов;
Пример метода сравнения номеров версий:
/*** Сравните размер номера версии. Если первое большое, верните положительное число, последнее большое и возвращает отрицательное число, и, если то же самое, вернуть 0 * @param version1 * @param version2 * @return */ public static int compareversion (String version1, string version2) throws Exception {if (version1 == null || version2 == null) {Thrish New Exception ("Comparevers error: resigns2 == null) {thress new Exception (" ifersversion: ");"); } String [] versionArray1 = version1.split ("//.") ;// Обратите внимание, что это обычный матч и". ". нельзя использовать; String [] versionArray2 = version2.split ("//."); int idx = 0; int minlength = math.min (versionArray1.length, versionArray2.length); // Получить минимальное значение длины int diff = 0; while (idx <minlength && (diff = versionArray1 [idx] .length () - versionArray2 [idx] .length ()) == 0 // Сравните длину First && (diff = versionArray1 [idx] .compareto (versionArray2 [idx])) == 0) {// compare the icments ++ idx; } // Если размер был разделен, он будет возвращен напрямую. Если размер не был разделен, то снова сравните количество битов. Субверация числа велика; diff = (diff! = 0)? DIFF: versionArray1.length - versionArray2.length; вернуть дифференциал; } Примечание. Параметр метода разделения является регулярным соответствующим выражением и не может использоваться как «». ("." (".", чтобы соответствовать любому значению в регулярном выражении). Вам нужно использовать "//.". «Чтобы считать разделение по номеру точки;
Таким образом, сначала разделите на подстроенные массивы, а затем сравните числа подрывной деятельности один за другим. При сравнении чисел подрывных действий сначала сравните количество цифр. Если количество цифр большое, количество цифр будет большим. Когда количество цифр одинаково, сравните в соответствии с методом сравнения строк;
Если все сравнения завершены (одно из номеров версий сравнивается), посмотрите, какой номер версии имеет больше чисел подрывных действий, то есть длину разделенного массива, а числа подрывных препаратов больше,;
Таким образом, различные ситуации считаются более тщательно, а размер числа версий сравнивается; в том числе суффиксы букв также могут быть использованы;
Например, «9,9», «10.8.8.6», если вы сравниваете напрямую по строке, первое будет больше, а последний будет меньше, что, очевидно, неверно; После сегментации сравниваются первая основная версия 9 и 10, а из цифр результат будет большим;
Например, «9,9b», «9.8a» и т. Д. Также применимы, но это не применимо, если используется метод преобразования в Int или Double.