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

Google Sheets结果处理:substringAfter提取的"117"调用toIntOrNull()返回null?

问题分析与解决方法

核心问题排查

你遇到的问题大概率是以下两个原因之一:

  1. 误用substringAfter而非substringAfterLast
    substringAfter("I")会返回第一个匹配"I"之后的所有内容,如果你的updatedRange里前面的单元格标识包含"I"(比如"tData!I10:A117:I117"),提取结果就会是"10:A117:I117",这种混合字符自然转不成整数。
  2. 提取的字符串包含不可见空白字符
    比如返回的updatedRange末尾有空格、换行符,或者提取后字符串前后有空白,toIntOrNull()遇到非数字字符就会返回null。

解决步骤

方法1:改用substringAfterLast提取行号

直接取最后一个"I"之后的内容,确保只拿到行号部分:

val updatedRange = "tData!A117:I117"
val rowStr = updatedRange.substringAfterLast("I") // 准确拿到"117"
val rowNum = rowStr.toIntOrNull()

方法2:先清除空白再转换

如果是空白字符导致的问题,先调用trim()去掉前后不可见字符:

val rowStr = updatedRange.substringAfter("I").trim()
val rowNum = rowStr.toIntOrNull()

方法3:用正则提取数字(最可靠)

不管updatedRange格式怎么变,直接匹配最后一组数字:

val updatedRange = "tData!A117:I117"
val rowNum = Regex("\\d+$").find(updatedRange)?.groupValues?.get(1)?.toIntOrNull()

验证技巧

可以先打印提取后的字符串的详细信息,排查是否有异常字符:

val rowStr = updatedRange.substringAfter("I")
println("字符串内容: '$rowStr'") // 用单引号包裹,能直观看到前后是否有空白
println("字符串长度: ${rowStr.length}")
rowStr.forEach { println("字符: '$it' 编码: ${it.code}") } // 数字的ASCII编码是48-57,若出现其他编码就是异常字符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:30:51