Android Studio Java转Kotlin后出现String与Regex类型不匹配错误
问题修复方案
本次报错共有3处需要修改的点:
- Kotlin中
String.matches()方法要求传入Regex类型参数,直接传入字符串会触发类型不匹配报错 hasUppercase函数逻辑错误:s.isLowerCase()返回布尔值,不能直接和字符串s做相等判断- 正则中的数字匹配符
\d在Kotlin普通字符串中需要转义为\\d,否则会识别为非法转义字符
修复后的完整函数代码
// 长度判断无需修改 fun hasLength(value: CharSequence): Boolean { return value.toString().length >= 8 } // 修复数字判断函数 fun hasDigit(value: CharSequence): Boolean { return value.toString() matches "(.*\\d.*)".toRegex() } // 修复大写字母判断函数 fun hasUppercase(value: CharSequence): Boolean { val s = value.toString() // 逻辑说明:原字符串和全小写转换后的字符串不一致,说明存在大写字母 return s != s.lowercase() } // 修复特殊符号判断函数 fun hasSymbol(value: CharSequence): Boolean { val s = value.toString() return !s.matches("[A-Za-z0-9 ]*".toRegex()) }
可选性能优化方案
可以把正则提前定义成全局常量,避免每次调用函数重复创建Regex实例:
// 全局常量定义 private val DIGIT_REGEX = Regex(".*\\d.*") private val SYMBOL_REGEX = Regex("[A-Za-z0-9 ]*") fun hasDigit(value: CharSequence): Boolean { return value.toString() matches DIGIT_REGEX } fun hasSymbol(value: CharSequence): Boolean { return !value.toString().matches(SYMBOL_REGEX) }
内容的提问来源于stack exchange,提问作者prarit dhawan
相关产品推荐
相关产品推荐

