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

Kotlin中contains方法判断含英文字母返回false问题排查

Kotlin中contains判断包含英文字母始终返回false的问题解决

问题根源

你写的代码逻辑完全搞反了:

  • 你定义的eLang是一长串包含大小写字母和空格的拼接字符串
  • 调用input_string?.contains(eLang, ignoreCase = true)时,实际是在检查输入字符串是否包含整个eLang作为子串,而非判断输入里是否存在任意一个英文字母。普通输入不可能匹配这一大串内容,所以结果永远返回false。

正确解决方案

以下是几种靠谱的判断输入是否包含英文字母的方法:

方法1:正则表达式匹配(最简洁)

用正则直接匹配任意大小写英文字母:

val hasEnglishLetter = input_string?.matches(Regex(".*[a-zA-Z].*")) ?: false
println(hasEnglishLetter)

解释:.*匹配任意长度的任意字符,[a-zA-Z]匹配单个大小写英文字母,整个正则表示字符串中至少存在一个英文字母。

方法2:遍历字符检查(直观)

通过any函数遍历字符串,判断是否存在符合条件的字符:

val hasEnglishLetter = input_string?.any { it.isLetter() } ?: false
println(hasEnglishLetter)

解释:Char.isLetter()会直接判断字符是否为字母(包含大小写英文字母),any函数只要找到一个符合条件的字符就返回true。

方法3:字符范围判断(手动校验)

直接指定字符的范围区间:

val hasEnglishLetter = input_string?.any { it in 'a'..'z' || it in 'A'..'Z' } ?: false
println(hasEnglishLetter)

修正后的完整代码示例

顺便修复了原代码中readLine().toString()的潜在问题(输入为空时会得到"null"字符串):

class Loop {
    public val input_string: String? = readLine()
    public val input_size = readLine()?.toInt()

    fun looping(a: String, b: Int) {
        if ((input_size ?: 0) > 1 && !input_string.isNullOrEmpty()) {
            for (i in 0 until input_size!!) {
                println(input_string)
            }

            input_string.let { println("length word you type : ${it.length}") }
            input_size.let { println("Count looping: $it") }

            // 用正则判断是否包含英文字母
            val hasEnglishLetter = input_string.matches(Regex(".*[a-zA-Z].*"))
            println(hasEnglishLetter)
        }
    }
}

内容的提问来源于stack exchange,提问作者Tom Levi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:05:21