zoukankan      html  css  js  c++  java
  • apk比较版本大小

    Java String.compareTo(), 此方法如果这个字符串是等参数字符串那么​返回值0,如果这个字符串是按字典顺序小于字符串参数那么返回小于0的值,
    如果此字符串是按字典顺序大于字符串参数那么一个大于0的值
    描述

    java.lang.String.compareTo() 方法比较两个字符串的字典。比较是基于字符串中的每个字符的Unicode值。此String对象表示的字符序列的参数字符串表示的字符序列进行比较字典.

    之前比较客户端版本号,一直用的是String.compareTo,

    它的比较方式是按照字符串的比较来执行的,所以它有不正确的地方。
    举个例子,之前客户端版本号为:9.9.9,而服务器端最新的客户端版本号为:10.0.1,虽然10.0.1明显高于9.9.9,但是按照compareTo方法,这个9.9.9是大于10.0.1的,导致客户端版本号比较错误。
    下面是分隔后的版本号转化为Integer值来比较.

    /** * * @Title: compareVersion * @Description: 比较版本大小 * @param version1 * @param version2 * @return * @return: int */ public static int compareVersion(String version1, String version2) { if (version1.equals(version2)) { return 0; } String[] version1Array = version1.split("\."); String[] version2Array = version2.split("\."); int index = 0; //获取最小长度值 int minLen = Math.min(version1Array.length, version2Array.length); int diff = 0; //循环判断每位的大小 while (index < minLen && (diff = version1Array[index].length() - version2Array[index].length()) == 0 && (diff = version1Array[index].compareTo(version2Array[index]))==0) { index++; } if (diff == 0) { //如果位数不一致,比较多余位数 for (int i = index; i < version1Array.length; i++) { if (Integer.parseInt(version1Array[i]) > 0) { return 1; } } for (int i = index; i < version2Array.length; i++) { if (Integer.parseInt(version2Array[i]) > 0) { return -1; } } return 0; } else { return diff > 0 ? 1 : -1; } }

      

  • 相关阅读:
    nohup npm start &启动之后关闭终端程序没有后台运行
    C++标准库之string返回值研究
    Apache Thrift的C++多线程编程定式
    实战C++对象模型之成员函数调用
    std::string的拷贝赋值研究
    REdis AOF文件结构分析
    使用Linux自带日志滚动工具logrotate滚动redis日志示例
    源码分析MySQL mysql_real_query函数
    源码解读Linux的limits.conf文件
    C++中的return和exit区别
  • 原文地址:https://www.cnblogs.com/ipetergo/p/6825186.html
Copyright © 2011-2022 走看看