java比较版本号,比如1.0.3和1.2.1相比较考虑到可以用String的compareTo()方法,代码如下:

public class MainClass {
public static void main(String[] args) { String version1 = "1.0.3";
String version2 = "1.2.1"; int compareTo = version1.compareTo(version2); System.out.println(compareTo); }
}

输出结果是-2,也就是说version1小,这是正确的。

但是,这种情况仅限于小数点左右的数字位数相同,如果不相同,会出现一下情况:

public class MainClass {
public static void main(String[] args) { String version1 = "5.2.3790.24123";
String version2 = "5.11.7883"; int compareTo = version1.compareTo(version2); System.out.println(compareTo);
}
}

这是输出结果是1,表示version1大,显然是错误的。

所以,正常逻辑应该是以小数点分隔,对应位置上的数字比较大小,代码如下:

public class MainClass {
/**
* 比较版本号的大小,前者大则返回一个正数,后者大返回一个负数,相等则返回0
*/
public static void main(String[] args) {
String version1 = "5.2.3790.24123";
String version2 = "5.11.7883"; String[] split1 = version1.split("\\."); //以.分隔需要转义
String[] split2 = version2.split("\\."); int length=Math.min(split1.length, split2.length);
int diff=0;
for(int i=0;i<length;i++){
diff = split1[i].length()-split2[i].length();
if(diff==0){ //位数相同时,比较大小
if(split1[i].compareTo(split2[i])>0){
System.out.println("1");
break;
}else if(split1[i].compareTo(split2[i])<0){
System.out.println("-1");
break;
}else if(i==length-1){
System.out.println(length==split1.length? -1 : 1);
} }else if(diff !=0){ //位数不同时,直接输出
System.out.println(diff);
break;
} }
}
}

java比较版本号的更多相关文章

  1. Android4.0-4.4 加入实体按键振动支持的方法(java + smali版本号)

    有些手机比方泛泰A820L, 泛泰A890 A900 以及Nubia Z5S 和Z5S mini具有实体按键(这里所说的实体按键是相对于虚拟按键而言, 包括物理按键和触摸屏上多出来的触摸实体按键), ...

  2. Java - Class版本号和UnsupportedClassVersionError

    问题分析 Java是向下兼容的,每一个jdk版本都有对应的class版本号(major + minor version numbers):如果用低版本的jvm去加载高版本jdk编译的类,就会报错:ja ...

  3. java实现版本号的比较

    之前比较客户端版本号,一直用的是String.compareTo,知道出现bug之后才明白了它的不完善地方.它的比较方式是按照字符串的比较来执行的,所以它有不正确的地方.举个例子,之前客户端版本号为: ...

  4. java -version 版本号与path中配置的不一致

    Error: could not open `F:\e\java\jre7\lib\amd64\jvm.cfg' C:\Users\wl>java -versionError: could no ...

  5. Atitit.ati&#160;dwr的原理and设计&#160;attilax&#160;总结&#160;java&#160;php&#160;版本号

    Atitit.ati dwr的原理and设计 attilax 总结 java php 版本号 1. dwr的长处相对于ajax来说.. 1 2. DWR工作原理 1 3. Dwr的架构 2 4. 自己 ...

  6. Ubuntu中配置Java环境变量时,出现command not found问题解决记录

    百度出Ubuntu中配置Java环境变量时,在利用sudo gedit /etc/profile 对profile编辑后, 在terminal中输入 sudo source /etc/profile, ...

  7. ubuntu 系统下搭建Java的环境

    1.首先可以使用 java -version来查看自己是否已经搭建了java的环境,如果出现了java的版本号则表示java的环境已经搭建好了!否则则继续下面的步骤进行java环境的搭建 2.进入Or ...

  8. 触摸java常量池

    java常量池是一个经久不衰的话题,也是面试官的最爱,题目花样百出,小菜早就对常量池有所耳闻,这次好好总结一下. 理论 小菜先拙劣的表达一下jvm虚拟内存分布:      程序计数器是jvm执行程序的 ...

  9. Java的cmd配置(也即Java的JDK配置及相关常用命令)——找不到或无法加载主类 的解决方法

    Java的cmd配置(也即Java的JDK配置及相关常用命令) ——找不到或无法加载主类  的解决方法 这段时间一直纠结于cmd下Java无法编译运行的问题.主要问题描述如下: javac 命令可以正 ...

随机推荐

  1. oracle数据库使用三个月的总结

    存储过程定义,举个例子如下: create or replace procedure test_person(id in Number, Ename In Varchar2, age In Varch ...

  2. Scipy - Python library - Math tool - Begin

    Introduction Scientific Computing Tools for Python. Seen in Scipy.org. Environment Linux, CentOS 7 w ...

  3. magento搬家

    将原来网站文件中的var文件中的cache和session文件删除,将media中的缓存文件删除.然后将所有文件制作成一个压缩包,以减少文件体积,方便转移. 将压缩包转移到新的服务器域名指向的文件夹, ...

  4. 浅谈MySQL数据类型

    MySQL 数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 一.数值类型 MySQL支持所有标 ...

  5. SQLite - TRUNCATE TABLE

    https://www.tutorialspoint.com/sqlite/sqlite_truncate_table.htm Unfortunately, no TRUNCATE TABLE in ...

  6. node的错误处理

    当node程序出现错误的时候,首先是要捕捉到错误,然后处理错误,不能让进程挂掉,最后是将错误写进日志. 1.在app.js最开始写,用process对象,监听uncaughtException事件pr ...

  7. iOS XCode启用/关闭Clang Warnings

    前言:warnings是编码中很重要的一个环节,编译器给出合理的warning能帮助开发者找到自己代码的问题,防止很多bug产生.  默认用XCode创建一个工程,会自动开启一些重要的warnings ...

  8. springmvc之格式化要显示的小数或者日期。

    把保存的小数或者日期按照想要的格式显示. 首先导入jar包joda-time-2.3.jar,下载地址http://pan.baidu.com/s/1gfNuUfp 这里使用注解的方式进行格式化. 创 ...

  9. Android 偶遇小问题解决方案集合

    1.Android 如何让EditText不自动获取焦点 解决方案:找一个EditText的父级控件把EditText默认的行为截断了!设置 android:focusable="true& ...

  10. 使用git 更新线上代码

    先本地代码合并://1合并分支git branch//2查看taggit tag //3添加tagcloud_crm]$ git tag -a v1.0.2 -m "0902"// ...