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