如何在Kotlin中从四段式版本号中可靠提取主版本和次版本号组合
解决方案
你之前的写法问题在于固定了截取长度,依赖主、次版本的位数,只要主版本或次版本的位数发生变化就会出现截断错误。通用的实现方式有两种,都可以完全适配任意位数的主、次版本场景:
方法1:按分隔符拆分(推荐,可读性更高)
核心逻辑是将版本号按.拆分为多个片段,直接取前两个片段拼接即可:
fun main() { val appVersion = "15.2.855.15" // 按.拆分,limit设为3可以不用处理后面的片段,提升性能 val versionParts = appVersion.split(".", limit = 3) val majorMinorVersion = "${versionParts[0]}.${versionParts[1]}" println(majorMinorVersion) // 输出:15.2 }
如果需要兼容格式不规范的版本号(比如只有1段、没有次版本的情况),可以增加防御判断:
fun getMajorMinorVersion(version: String): String { val parts = version.split(".") return when { parts.size >= 2 -> "${parts[0]}.${parts[1]}" parts.size == 1 -> "${parts[0]}.0" // 次版本缺省默认补0,可根据需求调整 else -> "0.0" // 空输入的默认返回值,可根据需求调整 } } // 测试用例 fun main() { println(getMajorMinorVersion("6.23.5.1")) // 输出:6.23 println(getMajorMinorVersion("3.1")) // 输出:3.1 println(getMajorMinorVersion("2")) // 输出:2.0 }
方法2:正则匹配
如果更偏好简洁写法,可以用正则匹配开头的数字.数字片段:
private val majorMinorPattern = "^(\\d+\\.\\d+)".toRegex() fun getMajorMinorByRegex(version: String): String { return majorMinorPattern.find(version)?.value ?: "0.0" }
内容的提问来源于stack exchange,提问作者cynicalswan77
相关产品推荐
相关产品推荐

