public static int compareVersion()

in odps-console-basic/src/main/java/com/aliyun/openservices/odps/console/utils/ODPSConsoleUtils.java [442:478]


  public static int compareVersion(String left, String right) {
    if (left.equals(right)) {
      return 0;
    }

    String pattern = "[\\\\.\\\\_\\\\-]";
    String[] leftArray = left.split(pattern);
    String[] rightArray = right.split(pattern);

    int length = leftArray.length < rightArray.length ? leftArray.length : rightArray.length;

    for (int i = 0; i < length; i++) {
      if (rightArray[i].equalsIgnoreCase(leftArray[i])) {
        continue;
      }

      if (org.apache.commons.lang.StringUtils.isNumeric(rightArray[i])
          && org.apache.commons.lang.StringUtils.isNumeric(leftArray[i])) {
        if (Integer.parseInt(rightArray[i]) > Integer.parseInt(leftArray[i])) {
          return -1;
        } else if (Integer.parseInt(rightArray[i]) < Integer.parseInt(leftArray[i])) {
          return 1;
        }
      } else {
        int res = leftArray[i].compareToIgnoreCase(rightArray[i]);

        return res > 0 ? 1 : res;
      }
      // 相等 比较下一组值
    }

    if (leftArray.length == rightArray.length) {
      return 0;
    } else {
      return leftArray.length < rightArray.length ? -1 : 1;
    }
  }