Java字符串转基本类型需防御性处理:先判null、trim、判空,再try-catch精准捕获NumberFormatException,按类型校验范围与格式,推荐用NumberUtils或封装Optional工具类。

Java 中 String 转基本数据类型时,NumberFormatException 和 NullPointerException 是最常遇到的异常。根本原因不是方法本身有问题,而是输入不可控——比如前端传参为空、含空格、带字母、超范围或为 null。防止异常的关键不是“避开 try-catch”,而是建立一套防御性转换流程。
预处理:先清理再判断
所有数字型转换前,必须统一处理常见脏数据:
- 判 null:避免直接调用方法导致 NullPointerException
- trim() 去首尾空白:像 " 123 "、" 45.6" 这类字符串不 trim 会直接抛 NumberFormatException
- 判空(trim 后长度为 0):"" 或纯空白字符串不能被 parseXxx() 接受
捕获异常是必选项,不是备选方案
即使做了预处理,也不能完全排除非法输入(例如 "12a3"、"NaN"、"Infinity")。因此,try-catch 不是兜底,而是标准动作:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 对 Integer.parseInt、Double.parseDouble 等必须包裹 try-catch
- 不要只 catch Exception,应精准捕获 NumberFormatException
- 在 catch 块中明确返回默认值(如 0、-1)、抛业务异常,或记录日志
按类型选择合适方法,并注意边界
不同目标类型处理逻辑差异明显,不能套用同一模板:
立即学习“Java免费学习笔记(深入)”;
- int/long/short/byte:用 parseInt/parseLong 等,但要额外校验数值范围(如 int 最大为 2147483647),超出需改用 Long 或自定义校验
- double/float:parseDouble 可解析 "NaN"、"Infinity",但小写 "nan" 会失败;建议配合 Double.isFinite() 判断有效性
- boolean:Boolean.parseBoolean() 不抛异常,但只认全小写 "true",其余全返回 false —— 容易静默出错,建议用 equalsIgnoreCase 显式比对
- char:没有 parseChar,需校验字符串长度为 1 后取 charAt(0)
生产环境推荐封装或引入工具类
重复写 try-catch + trim + 默认值容易遗漏。更稳妥的做法:
- 用 Apache Commons Lang 的 NumberUtils.toInt(str, defaultValue),自动 trim、判 null、捕获异常并返回默认值
- 自己封装工具方法,返回 Optional
,让调用方决定如何处理空值 - 对关键业务字段(如金额、ID),在接收参数时就做格式校验(正则匹配 ^-?\d+(\.\d+)?$),提前拦截

















