版本号的比较函数
2015-10-10 09:23
176 查看
网上搜索了下,没发现太好的实现,于是自己实现了。
原理就是按点号切割字符串后从前往后转换成数字进行比较,所以 2.11.3 > 2.6.2
(如果直接比较字符串,结果是错误的) 。
可以支持不同长度的版本号比较, 1.2.3 > 1.2。
不支持带数字的版本号进行比较,比如 1.2.3a vs
1.2.3b,会直接异常( Integer.valueOf
方法扔异常)。如果有此需求应该自己实现版本比较函数。
public static int
compare(String version1, String version2) {
String[] subVersions1 =
version1.trim().split("\\.");
String[] subVersions2 =
version2.trim().split("\\.");
int compareLength =
Math.min(subVersions1.length, subVersions2.length);
for (int i = 0; i < compareLength; i++)
{
int
subVersion1 = Integer.valueOf(subVersions1[i]);
int
subVersion2 = Integer.valueOf(subVersions2[i]);
if
(subVersion1 < subVersion2) {
return -1;
} else if
(subVersion1 > subVersion2) {
return 1;
}
}
if (subVersions1.length == subVersions2.length)
{
return
0;
} else {
return
(subVersions1.length < subVersions2.length ? -1 : 1);
}
}
原理就是按点号切割字符串后从前往后转换成数字进行比较,所以 2.11.3 > 2.6.2
(如果直接比较字符串,结果是错误的) 。
可以支持不同长度的版本号比较, 1.2.3 > 1.2。
不支持带数字的版本号进行比较,比如 1.2.3a vs
1.2.3b,会直接异常( Integer.valueOf
方法扔异常)。如果有此需求应该自己实现版本比较函数。
public static int
compare(String version1, String version2) {
String[] subVersions1 =
version1.trim().split("\\.");
String[] subVersions2 =
version2.trim().split("\\.");
int compareLength =
Math.min(subVersions1.length, subVersions2.length);
for (int i = 0; i < compareLength; i++)
{
int
subVersion1 = Integer.valueOf(subVersions1[i]);
int
subVersion2 = Integer.valueOf(subVersions2[i]);
if
(subVersion1 < subVersion2) {
return -1;
} else if
(subVersion1 > subVersion2) {
return 1;
}
}
if (subVersions1.length == subVersions2.length)
{
return
0;
} else {
return
(subVersions1.length < subVersions2.length ? -1 : 1);
}
}
相关文章推荐
- 使用boost::bind/std::bind进行封…
- SQLite批量插入Android代码示例
- SQLite批量插入IOS代码示例
- "《英雄联盟》支撑最高750万同时在…
- 程序员应该具备的能力
- 小工具:批量转换文件夹下的特定类…
- IOS如何在容器类(如NSMutableSet)…
- 遇到技术问题的时候,建议使用如下…
- 关于代码注释的认识更新
- npm发布注意事项
- 高效地反向逐行读取文件
- Java和C/C++进行DES/AES密文传输
- 使用std::map和std::list实现LRU(…
- live555 ubuntu 12.04 下的编译安装测试
- 对软件架构的一些思考(V2.0)
- QT程序如何获知鼠标enter/leave通…
- 谈谈网络编程中应用层(基于TCP/UDP…
- iOS 9 下周就正式推出了,你的 app 真的适配好了吗?
- VC 获取当前目录
- POJ 2823 单调队列入门水题