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

Android Kotlin:toIntOrNull()判断字符串转Int异常求助

问题解决方案

核心原因

日志显示的"29"可能包含隐藏空白字符(如首尾空格、换行符、制表符)或全角数字,导致toIntOrNull()无法识别为合法整数。

针对性处理方案

  • 清理首尾空白字符
    优先使用trim()去除字符串首尾的所有空白字符(空格、\n、\t、\r等),这是最常见的解决场景:

    val cleanedRetVal = retVal.trim()
    cleanedRetVal.toIntOrNull()?.let { validInt ->
        fetchProducts(validInt)
    }
    
  • 转换全角数字为半角
    如果字符串是全角数字(如"29"),toIntOrNull()会返回null,需要先转成半角再处理:

    // 通用全角转半角工具函数
    fun String.toHalfWidth(): String {
        return this.map { c ->
            when (c.code) {
                in 65281..65374 -> c - 65248 // 全角符号转半角
                12288 -> ' ' // 全角空格转半角
                else -> c
            }
        }.joinToString("")
    }
    
    // 使用示例
    val cleanedRetVal = retVal.toHalfWidth().trim()
    cleanedRetVal.toIntOrNull()?.let { validInt ->
        fetchProducts(validInt)
    }
    
  • 排查异常隐藏字符
    如果以上方法无效,打印字符串每个字符的编码,定位异常字符:

    retVal.forEachIndexed { index, c ->
        println("字符[$index]: '$c',编码: ${c.code}")
    }
    

    正常半角'2'编码为50,'9'为57,根据打印结果针对性过滤或转换异常字符。

内容的提问来源于stack exchange,提问作者aluis.rcastro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 19:46:00