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
相关产品推荐
相关产品推荐

