zoukankan      html  css  js  c++  java
  • 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()方法即可!
    欢迎转载!
    如果一件事情你觉得难的完不成,你可以把它分为若干步,并不断寻找合适的方法。最后你发现你会是个超人。不要给自己找麻烦,但遇到麻烦绝不怕,更不要退缩。 电工查找电路不通点的最快方法是:分段诊断排除,快速定位。你有什么启示吗? 求知若饥,虚心若愚。 当你对一个事情掌控不足的时候,你需要做的就是“梳理”,并制定相应的规章制度,并使资源各司其职。
  • 相关阅读:
    判断 undefined and ( == null) and (!something) and ( == null)
    textarea高度自适应自动展开
    退出 js和Jquery区别
    javascript高级程序设计 学习笔记 第五章 下
    Bind, Call and Apply in JavaScript
    javascript高级程序设计 学习笔记 第五章 上
    小程序入门---登录流程
    Array类型 JS
    深入浅出妙用 Javascript 中 apply、call、bind
    微信公众号开发(与angular框架相结合)
  • 原文地址:https://www.cnblogs.com/wvqusrtg/p/5104563.html
Copyright © 2011-2022 走看看