APP版本更新中比较APP的版本号高低并返回最高版本
背景
App检查更新功能,每次进行功能迭代准备上线时,在后台配置一个新的版本号并上传最新的apk,然后在App点击检查更新时返回最新的版本号。
版本号是非空字符串并且只包含数字和 .
字符。如1.2.33这个 '.' 字符不表示小数点,用于分隔数字序列。
方案一
对版本号进行两两比较,判断其大小,得出最高版本。
版本号的特点,假设版本号段数不固定,可能是三段,也可能是四段。每一段的数字位数也不固定,总之从高位往低位判断,数字大的版本号大。
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | package com.lingyejun.dating.chap11.toutiao; import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; /** * @Author: lingyejun * @Date: 2022/5/1 * @Describe: * @Modified By: */ public class CompareVersionNumbers { public static int compareVersions(String version1, String version2) { String[] levels1 = version1.split( "\\." ); String[] levels2 = version2.split( "\\." ); int length = Math.max(levels1.length, levels2.length); for ( int i = 0 ; i < length; i++) { Integer v1 = i < levels1.length ? Integer.parseInt(levels1[i]) : 0 ; Integer v2 = i < levels2.length ? Integer.parseInt(levels2[i]) : 0 ; // 对每一段的版本号从高位到低位进行判断 int compare = v1.compareTo(v2); // 如果当前段版本号相同,则继续比较下一段,若当前段能判断出版本高低则直接返回 if (compare != 0 ) { return compare; } } return 0 ; } public static void main(String[] args) { String version1 = "1.23.789" ; String version2 = "1.33.6678" ; int compare = compareVersions(version1, version2); System.out.println(compare); String version3 = "11.1.2" ; List<String> versionList = Arrays.asList(version1, version3, version2); List<String> sortedVersionList = versionList.stream() .sorted(CompareVersionNumbers::compareVersions) .sorted(Comparator.reverseOrder()) .collect(Collectors.toList()); System.out.println(sortedVersionList); String maxVersion = versionList.stream() .sorted(CompareVersionNumbers::compareVersions) .sorted(Comparator.reverseOrder()) .findFirst().orElse( null ); System.out.println(maxVersion); } } |
方案二
App在开发过程中会有自己的版本控制,每次打完包时会标注此包对外发布的版本号,还有一个版本编码(数字类型)随着版本号的增加此数字也是递增的。我们可以在后台维护的时候把版本号和版本编码都维护进去。我们在选取最高版本的时候,直接查数据库select max(version_numer) from app_version;就可以直接得到最大的版本了。
本篇文章如有帮助到您,请给「翎野君」点个赞,感谢您的支持。
首发链接:https://www.cnblogs.com/lingyejun/p/16212161.html
出处:http://www.cnblogs.com/lingyejun/
若本文如对您有帮助,不妨点击一下右下角的【推荐】。
如果您喜欢或希望看到更多我的文章,可扫描二维码关注我的微信公众号《翎野君》。
转载文章请务必保留出处和署名,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?