| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- package com.mes.util;
- /**
- * 客户端版本号比较,格式 0.0.0 / 0.0.1。
- * 没有点的旧数字(如 1)按 0.0.1 处理。
- */
- public final class ClientVersionUtils {
- private ClientVersionUtils() {
- }
- public static int compare(String left, String right) {
- int[] a = parse(left);
- int[] b = parse(right);
- int n = Math.max(a.length, b.length);
- for (int i = 0; i < n; i++) {
- int va = i < a.length ? a[i] : 0;
- int vb = i < b.length ? b[i] : 0;
- if (va != vb) {
- return va < vb ? -1 : 1;
- }
- }
- return 0;
- }
- public static boolean isNewer(String latest, String current) {
- return compare(latest, current) > 0;
- }
- public static String max(String left, String right) {
- if (isBlank(left)) {
- return normalize(right);
- }
- if (isBlank(right)) {
- return normalize(left);
- }
- return compare(left, right) >= 0 ? normalize(left) : normalize(right);
- }
- public static String normalize(String version) {
- if (isBlank(version)) {
- return "0.0.0";
- }
- int[] parts = parse(version);
- return parts[0] + "." + parts[1] + "." + parts[2];
- }
- private static int[] parse(String version) {
- int[] result = new int[] {0, 0, 0};
- if (isBlank(version)) {
- return result;
- }
- String[] parts = version.trim().split("\\.");
- if (parts.length == 1) {
- result[2] = parseInt(parts[0]);
- return result;
- }
- for (int i = 0; i < parts.length && i < 3; i++) {
- result[i] = parseInt(parts[i]);
- }
- return result;
- }
- private static int parseInt(String value) {
- try {
- return Integer.parseInt(value.trim());
- } catch (Exception e) {
- return 0;
- }
- }
- private static boolean isBlank(String value) {
- return value == null || value.trim().length() == 0;
- }
- }
|