ClientVersionUtils.java 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package com.mes.util;
  2. /**
  3. * 客户端版本号比较,格式 0.0.0 / 0.0.1。
  4. * 没有点的旧数字(如 1)按 0.0.1 处理。
  5. */
  6. public final class ClientVersionUtils {
  7. private ClientVersionUtils() {
  8. }
  9. public static int compare(String left, String right) {
  10. int[] a = parse(left);
  11. int[] b = parse(right);
  12. int n = Math.max(a.length, b.length);
  13. for (int i = 0; i < n; i++) {
  14. int va = i < a.length ? a[i] : 0;
  15. int vb = i < b.length ? b[i] : 0;
  16. if (va != vb) {
  17. return va < vb ? -1 : 1;
  18. }
  19. }
  20. return 0;
  21. }
  22. public static boolean isNewer(String latest, String current) {
  23. return compare(latest, current) > 0;
  24. }
  25. public static String max(String left, String right) {
  26. if (isBlank(left)) {
  27. return normalize(right);
  28. }
  29. if (isBlank(right)) {
  30. return normalize(left);
  31. }
  32. return compare(left, right) >= 0 ? normalize(left) : normalize(right);
  33. }
  34. public static String normalize(String version) {
  35. if (isBlank(version)) {
  36. return "0.0.0";
  37. }
  38. int[] parts = parse(version);
  39. return parts[0] + "." + parts[1] + "." + parts[2];
  40. }
  41. private static int[] parse(String version) {
  42. int[] result = new int[] {0, 0, 0};
  43. if (isBlank(version)) {
  44. return result;
  45. }
  46. String[] parts = version.trim().split("\\.");
  47. if (parts.length == 1) {
  48. result[2] = parseInt(parts[0]);
  49. return result;
  50. }
  51. for (int i = 0; i < parts.length && i < 3; i++) {
  52. result[i] = parseInt(parts[i]);
  53. }
  54. return result;
  55. }
  56. private static int parseInt(String value) {
  57. try {
  58. return Integer.parseInt(value.trim());
  59. } catch (Exception e) {
  60. return 0;
  61. }
  62. }
  63. private static boolean isBlank(String value) {
  64. return value == null || value.trim().length() == 0;
  65. }
  66. }