美文网首页
Android 版本号(versionName)比较,包含字母

Android 版本号(versionName)比较,包含字母

作者: J_xs | 来源:发表于2019-03-07 23:47 被阅读0次

根据官方文档,Android的版本名称 android.os.VERSION.versionName 可能是 "4.4" 也可能是 “4.4a” 这种带字母的,对这种包含点需要进行比较
注意下面几点

  • 对字母比较之前要进行数字比较,当抛出格式一场时进行字母的unicode比较
  • 对小数点 . 分离出来的数组要最长的那个要进行比较,才能避免 4.0 和 4 是相同的情况
  • 要对可能出现的数组种空的情况做判断
  • kotlin 里面 until 而不是 .. 防止IndexOutOfBoundsException

    fun compareVersion(version1: String, version2: String): Int{
        if (version1 == version2) {
            return 0
        }
        val version1Array = version1.trim().split(".")
        val version2Array = version2.trim().split(".")
        var index = 0
        var minLen = Math.min(version1Array.size, version2Array.size)
        var diff = 0
        while(index < minLen) {
            try {
                diff = version1Array[index].toInt() - version2Array[index].toInt()
            } catch (e: NumberFormatException) {
                diff = version1Array[index].compareTo(version2Array[index])
            }
            if (diff != 0) {
                break
            }
            index++
        }

        if (diff == 0) {
            if (version1Array.size > minLen) {
                for (i in index until version1Array.size) {
                    try {
                        if (version1Array[i].isNotBlank() && version1Array[i].toInt()> 0) {
                            return 1
                        }
                    } catch (e: NumberFormatException) {
                        return 1
                    }
                }
                for (i in index until version2Array.size) {
                    try {
                        if (version2Array[i].isNotBlank() && version2Array[i].toInt()> 0) {
                            return -1
                        }
                    } catch (e: NumberFormatException) {
                        return -1
                    }

                }
            } else {

            }
        } else {
            return if(diff > 0) 1 else -1
        }
        return 0
    }

相关文章

网友评论

      本文标题:Android 版本号(versionName)比较,包含字母

      本文链接:https://www.haomeiwen.com/subject/vogkpqtx.html