随笔 - 45  文章 - 0 评论 - 7 阅读 - 20万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

  之前比较客户端版本号,一直用的是String.compareTo,知道出现bug之后才明白了它的不完善地方。它的比较方式是按照字符串的比较来执行的,所以它有不正确的地方。举个例子,之前客户端版本号为:9.9.9,而服务器端最新的客户端版本号为:10.0.1,虽然10.0.1明显高于9.9.9,但是按照compareTo方法,这个9.9.9是大于10.0.1的,导致客户端版本号比较错误。下面是分隔后的版本号转化为Integer值来比较,不过,还是首先比较的个数

复制代码
 1 public static int compareVersion(String version1, String version2) {
 2     if (version1.equals(version2)) {
 3         return 0;
 4     }
 5     String[] version1Array = version1.split("//.");
 6     String[] version2Array = version2.split("//.");
 7     int index = 0;
 8     //获取最小长度值
 9     int minLen = Math.min(version1Array.length, version2Array.length);
10     int diff = 0;
11     //循环判断每位的大小
12     while (index < minLen && (diff = Integer.parseInt(version1Array[index]) - Integer.parseInt(version2Array[index])) == 0) {
13         index++;
14     }
15     if (diff == 0) {
16         //如果位数不一致,比较多余位数
17         for (int i = index; i < version1Array.length; i++) {
18             if (Integer.parseInt(version1Array[i]) > 0) {
19                 return 1;
20             }
21         }
22 
23         for (int i = index; i < version2Array.length; i++) {
24             if (Integer.parseInt(version2Array[i]) > 0) {
25                 return -1;
26             }
27         }
28         return 0;
29     } else {
30         return diff > 0 ? 1 : -1;
31     }
32 }
复制代码

 

posted on   一寸相思万千劫  阅读(6659)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示