接口返回的 count 是字符串「1,024」,Java 里 Integer.parseInt 直接抛 NumberFormatException: For input string: 「1,024」。日志一翻,前面还带个空格,程序就挂在这一行。string转int 出错,多半是数据里混了格式字符。

各语言的标准写法

Java 用 Integer.parseInt(str) 得到 int,要对象用 Integer.valueOf(str)。Python 直接 int(str),还能 int(str, 16) 按十六进制转。JavaScript 用 Number(str),需要截断就用 parseInt(str, 10)。C++ 是 std::stoi,C 是 atoi,C# 是 int.Parse 或 int.TryParse,Go 是 strconv.Atoi,失败会返回 error,必须处理。

空格、小数点和千分位

多数解析函数只认可选正负号加纯数字。前后空格 Java 的 parseInt 不认,先 trim()。小数点也不行,「3.0」会抛异常,得先 Double.parseDouble 再强转。千分位逗号先 replace 掉。Python 的 int(「3.0」) 同样报 ValueError,但 int(3.9) 会截断成 3,字符串和小数走的是两条路,别混。

溢出和空值,线上最常见的两类事故

Java 的 int 上限 2147483647,parseInt(「2147483648」) 立刻抛异常,换成 Long.parseLong 才装得下。Python 整数没有上限,不用管。null 传进去也会异常,包装类型先判空。JavaScript 的坑更多:Number(「」) 是 0,parseInt(「」) 是 NaN,parseInt(「12abc」) 返回 12,Number(「12abc」) 是 NaN,表单校验用 Number 更严格。

拿不准就用带 Try 的版本,C# 的 int.TryParse、Go 的 error 返回值,Java 自己包 try-catch。转换前先 trim、去逗号、正则校验一遍,比出了问题再回滚便宜。string转int 说到底就三件事:格式、范围、空值,逐个确认就不会翻车。