You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:54:03