简单版本号比较:

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()方法即可!
欢迎转载!

JAVA 软件升级版本号比较的更多相关文章

  1. 关于Java 软件工程师应该知道或掌握的技术栈

    鄙人星云,今天突然想写这么一篇需要持续更新的文章,主要目的用于总结当前最流行的技术和工具,方便自己也方便他人. 更新时间:2018-10-23 09:26:19 码农职业路径图 码农入门职业路径图 J ...

  2. java 软件开发面试宝典

    一. Java 基础部分........................................................................................ ...

  3. 【swupdate文档 三】SWUpdate: 嵌入式系统的软件升级

    SWUpdate: 嵌入式系统的软件升级 概述 本项目被认为有助于从存储媒体或网络更新嵌入式系统.但是,它应该主要作为一个框架来考虑,在这个框架中可以方便地向应用程序添加更多的协议或安装程序(在SWU ...

  4. Eclipse Java SE升级Java EE

    网上教程大多是提供了“http://download.eclipse.org/releases/ganymede/”地址,但是实际更新过程中会报错. 大致查询了一下,很可能是版本不匹配的问题,正确的更 ...

  5. flyway实现java 自动升级SQL脚本

    flyway实现java 自动升级SQL脚本 为什么要用Flyway 在日常开发中,我们经常会遇到下面的问题: 自己写的SQL忘了在所有环境执行: 别人写的SQL我们不能确定是否都在所有环境执行过了: ...

  6. TODO:软件升级的那些事

    TODO:软件升级的那些事 软件升级,指软件从低版本向高版本的更新.由于高版本常常修复低版本的部分BUG,所以经历了软件升级,一般都会比原版本的性能更好,得到优化的效果,用户也能有更好的体验. 最近常 ...

  7. JLink软件升级到4.92之后,Jlink不能用了

    JLink软件升级到4.92之后,Jlink不能用了                                                       情景描述: Jlink软件升级到4.9 ...

  8. MTM量身定制系统 - 富友ERP产品 - 信息化推动服装行业管理软件升级

    MTM量身定制系统 - 富友ERP产品 - 信息化推动服装行业管理软件升级 国内第一款量体定制管理系统               结合富友软件10年服装行业经验和多家大型量身定制企业管理经验,推出的 ...

  9. NSIS:制作软件升级安装包

    原文 NSIS:制作软件升级安装包 相信不是每个人写的软件都只发布一次就可以了,肯定要有修改和维护的情况发生.在这种情况下,您可能就需要一个软件的升级安装包了.   现在,我们就来一步步把这个安装包做 ...

随机推荐

  1. Eclipse4.3正式版已发布

    Eclipse4.3正式版已发布,传送门http://www.eclipse.org/downloads/

  2. 嵌入式C开发人员的最好的0x10道笔试题

    嵌入式C开发人员的最好的0x10道笔试题 2006-11-22 15:53 约定: 1) 下面的测试题中,认为所有必须的头文件都已经正确的包含了 2)数据类型 char 一个字节 1 byte int ...

  3. Qt的“undefined reference to `vtable for”错误解决(手动解决,加深理解)

    使用QT编程时,当用户自定义了一个类,只要类中使用了信号或槽. Code::Blocks编译就会报错(undefined reference to `vtable for). Google上有很多这个 ...

  4. C#实现阻止关闭显示器和系统待机

    原文http://www.cnblogs.com/TianFang/archive/2012/10/12/2721883.html 最近写了一个下载程序,发现有一个问题:挂机下载的时候,下载任务会因为 ...

  5. HDU 3756 Dome of Circus

    不会做,参见别人的程序: /* 底面为xy平面和轴为z轴的圆锥,给定一些点,使得圆锥覆盖所有点并且体积最小 点都可以投射到xz平面,问题转换为确定一条直线(交x,z与正半轴)使得与x的截距r 和与z轴 ...

  6. C# windows ce编程-----我的第一次

    最近公司要求开发抄表软件,软件分为PC端和手持终端(简称HHU),HHU是基于英文版的windows ce6.0操作系统,开发环境要求VS2005+SQLite数据库,开发语言为C#,因为是第一次基本 ...

  7. 玩转Bootstarp(连载)

    一.Bootstarp是什么? 简单.灵活的用于搭建WEB页面的HTML.CSS.JS的工具集 (基于HTML5和CSS3) 总结:简洁强大的前端开发框架,可以让WEB开发更迅速.更简单 二.如何使用 ...

  8. quartz搭建与应用

    1.添加依赖 依赖包括Quartz和logback <dependencies> <dependency> <groupId>org.quartz-schedule ...

  9. is,as,sizeof,typeof,GetType

    这几个符号说来也多多少少的用过,今天就根据ProC#的讲述来总结一下:   1. IS:    检查变量类型是否与指定类型相符,返回True ,False.不报错.    老实说,我没怎么用过.看看下 ...

  10. 「C」关键字、标识符、注释、内存分析、数据、常量、变量

    一.关键字 C语言提供的有特殊含义的符号,共32个. 一般在Xcode中关键字全部显示紫褐色,关键字全部都为小写.如int.return等. 二.标识符 标识符是程序员在程序中自定义的一些符号和名称. ...