Java字符串安全转包装类数值需先判空去空白,再正则校验格式,用try-catch封装返回Optional或默认值,避免自动拆箱空指针,并按业务场景定制校验规则。

Java 中将字符串安全转为包装类数值,核心是避免 NumberFormatException 和空指针,同时明确处理 null、空白、非法格式等边界情况。直接调用 Integer.parseInt() 或 Integer.valueOf() 不加校验,在业务中极易引发运行时异常。
先判空再 trim,再校验是否为有效数字格式
字符串可能为 null、全空格或仅含不可见字符(如制表符、换行符),直接解析会抛异常。应统一先做非空和去空白处理,再判断是否符合数字格式。
- 使用
StringUtils.isBlank(str)(Apache Commons)或手动str == null || str.trim().isEmpty() - 对非空字符串,用正则粗筛(如整数:
^[-+]?\d+$;小数:^[-+]?\d*\.?\d+$),注意正则不覆盖科学计数法,业务若需支持,建议交由BigDecimal构造器捕获异常 - 避免仅靠
contains(".")判断浮点——"123."或".45"都非法
用 try-catch 封装解析逻辑,返回 Optional 或默认值
包装类的静态解析方法(如 Integer.valueOf())在失败时抛异常,业务代码应主动捕获并转化为可控结果。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 推荐封装为工具方法,返回
Optional<Integer>:成功则Optional.of(...),失败则Optional.empty() - 若需默认值(如缺失时取 0),可提供带 default 参数的重载:
parseIntOrDefault("abc", 0) → 0 - 不要在 catch 块里吞掉异常或只打日志却不返回明确语义——业务层需要知道“转换失败”这个事实
注意包装类与基本类型的差异,避免自动拆箱空指针
用 Integer.valueOf() 得到的是包装对象,若后续直接赋给 int 变量或参与运算,会触发自动拆箱。当值为 null 时,立刻抛 NullPointerException。
立即学习“Java免费学习笔记(深入)”;
- 优先使用包装类型变量(如
Integer count)并配合Optional流式处理 - 若必须转基本类型,先判非空:
Integer val = parseIntSafe(str); int result = (val != null) ? val : 0; - 慎用
Objects.requireNonNullElse(..., 0)替代显式判空,语义更清晰
业务场景适配:日期/金额/ID 等需定制校验
通用数字转换不能替代业务规则。例如:
- 用户 ID 字符串转
Long,需额外检查是否 > 0(负数 ID 无效) - 价格字符串转
BigDecimal,应保留精度,避免用Double引入浮点误差 - 状态码转
Integer后,还需校验是否在预定义枚举范围内(如Status.of(code)) - 前端传来的 "00123" 是合法整数,但某些业务要求去除前导零后再解析,或直接按字符串比对

















