• JAVA 软件升级版本号比较


    简单版本号比较:

    public class CompareVersion {
     
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    java.lang.System.out.println
    ( value( "10.1.2.0" ) > value( "9.0.0.0" ));  
    }
     
    public static long value(final java.lang.String string) {
    if (string.contains(".")) {
    final int index = string.lastIndexOf(".");
    return value(string.substring(0, index)) * 100
    + value(string.substring(index + 1));
    } else
    return java.lang.Long.valueOf(string);
    }
    }
    上边的简单版本号递归算法并不算好
    下面我们看一个复杂点,但非常实用的版本号比较类:
    public class Scratch
    {
        private static class VersionStringComparator
                implements Comparator<String>
        {
            public int compare(String s1, String s2){
                if( s1 == null && s2 == null )
                    return 0;
                else if( s1 == null )
                    return -1;
                else if( s2 == null )
                    return 1;

                String[]
                    arr1 = s1.split("[^a-zA-Z0-9]+"),
                    arr2 = s2.split("[^a-zA-Z0-9]+")
                ;

                int i1, i2, i3;

                for(int ii = 0, max = Math.min(arr1.length, arr2.length); 
    ii <= max; ii++){
                    if( ii == arr1.length )
                        return ii == arr2.length ? 0 : -1;
                    else if( ii == arr2.length )
                        return 1;

                    try{
                        i1 = Integer.parseInt(arr1[ii]);
                    }
                    catch (Exception x){
                        i1 = Integer.MAX_VALUE;
                    }

                    try{
                        i2 = Integer.parseInt(arr2[ii]);
                    }
                    catch (Exception x){
                        i2 = Integer.MAX_VALUE;
                    }

                    if( i1 != i2 ){
                        return i1 - i2;
                    }

                    i3 = arr1[ii].compareTo(arr2[ii]);

                    if( i3 != 0 )
                        return i3;
                }

                return 0;
            }
        }

        public static void main(String[] ss){

            String[] data = new String[]{
                "2.0",
                "1.5.1",
                "10.1.2.0",
                "9.0.0.0",
                "2.0.0.16",
                "1.6.0_07",
                "1.6.0_07-b06",
                "1.6.0_6",
                "1.6.0_07-b07",
                "1.6.0_08-a06",
                "5.10",
                "Generic_127127-11",
                "Generic_127127-13"
            };

            List<String> list = Arrays.asList(data);
            Collections.sort(list, new VersionStringComparator());

            for(String s: list)
                System.out.println(s);
        }
    }
    </code>

    <output>
      1.5.1
      1.6.0_6
      1.6.0_07
      1.6.0_07-b06
      1.6.0_07-b07
      1.6.0_08-a06
      2.0
      2.0.0.16
      5.10
      9.0.0.0
      10.1.2.0
      Generic_127127-11
      Generic_127127-13
    </output>
    如果简单的比较版本号,抽取其中的compare()方法即可!
    欢迎转载!
    如果一件事情你觉得难的完不成,你可以把它分为若干步,并不断寻找合适的方法。最后你发现你会是个超人。不要给自己找麻烦,但遇到麻烦绝不怕,更不要退缩。 电工查找电路不通点的最快方法是:分段诊断排除,快速定位。你有什么启示吗? 求知若饥,虚心若愚。 当你对一个事情掌控不足的时候,你需要做的就是“梳理”,并制定相应的规章制度,并使资源各司其职。
  • 相关阅读:
    requests-验证码登录
    python接口
    Xmanager6
    jmeter提取变量注意事项
    badboy录制
    Config 多账户多区域数据聚合
    AWS Aurora数据库 Multi-Master
    确定客户主密钥的过去使用情况
    将应用程序部署到 AWS Elastic Beanstalk 环境
    VPC Peering 具有特定路由的配置
  • 原文地址:https://www.cnblogs.com/wvqusrtg/p/5104563.html
Copyright © 2020-2023  润新知