VersionUtils.java 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package com.baomidou.mybatisplus.extension.toolkit;
  2. import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
  3. import com.baomidou.mybatisplus.core.toolkit.StringUtils;
  4. /**
  5. * <p>
  6. * VersionUtils ,比较版本号
  7. * </p>
  8. *
  9. * @author Caratacus
  10. * @Date 2016-12-5
  11. */
  12. public class VersionUtils {
  13. /**
  14. * 比较版本号的大小,前者大则返回一个正数,后者大返回一个负数,相等则返回0
  15. *
  16. * @param version1
  17. * @param version2
  18. * @return
  19. */
  20. public static int compareVersion(String version1, String version2) {
  21. if (StringUtils.isEmpty(version1) || StringUtils.isEmpty(version2)) {
  22. throw new MybatisPlusException("Error: CompareVersion Error: Illegal Argument !" );
  23. }
  24. // 切割点 ".";
  25. String[] versionArray1 = version1.split("\\." );
  26. String[] versionArray2 = version2.split("\\." );
  27. int idx = 0;
  28. // 取最小长度值
  29. int minLength = Math.min(versionArray1.length, versionArray2.length);
  30. int diff = 0;
  31. // 先比较长度 再比较字符
  32. while (idx < minLength && (diff = versionArray1[idx].length() - versionArray2[idx].length()) == 0
  33. && (diff = versionArray1[idx].compareTo(versionArray2[idx])) == 0) {
  34. ++idx;
  35. }
  36. // 如果已经分出大小,则直接返回,如果未分出大小,则再比较位数,有子版本的为大;
  37. diff = (diff != 0) ? diff : versionArray1.length - versionArray2.length;
  38. return diff;
  39. }
  40. /**
  41. * 比较版本号 true
  42. *
  43. * @param version1
  44. * @param version2
  45. * @return boolean true v1>=v2 false相反
  46. */
  47. public static boolean compare(String version1, String version2) {
  48. int num = compareVersion(version1, version2);
  49. return num >= 0;
  50. }
  51. }