前言
在 Java 项目开发中,我们经常需要进行各种数值类型的判断、转换、默认值处理等操作。Apache Commons Lang 提供了一个非常实用的工具类 org.apache.commons.lang3.math.NumberUtils
,它封装了大量常用的数值处理方法,是一个高效可靠的数值工具集合。
一、常用方法详解
1. 判断字符串是否是数字
boolean result = NumberUtils.isCreatable("123.45"); // 支持负号、小数、科学计数法
boolean isDigits = NumberUtils.isDigits("123"); // 只能是正整数
2. 字符串转数字(带默认值)
int i = NumberUtils.toInt("123", 0);
double d = NumberUtils.toDouble("3.14", 1.0);
long l = NumberUtils.toLong("abc", 100L); // 转换失败返回默认值
3. 取最大/最小值
int max = NumberUtils.max(1, 5, 3); // 返回 5
long min = NumberUtils.min(99L, 12L, 77L); // 返回 12
4. 数字比较
boolean equal = NumberUtils.compare(10, 10) == 0;
5. 创建任意类型数字对象
Number n = NumberUtils.createNumber("123.45");
二、常见应用场景
-
参数校验:校验用户输入是否为数字、转化为对应类型。
-
配置解析:解析配置文件中的数值型配置,保证默认值兜底。
-
排序筛选:集合元素的最小最大值处理。
-
简化 null 判断:避免手动判空及 try-catch。
三、与原生 API 对比
功能 | 原生方式 | NumberUtils | 优势 |
---|---|---|---|
判断是否数字 | 需自定义正则 | isCreatable() | 覆盖全面、易用 |
转换带默认值 | 手动 try-catch | toInt(str, def) | 简洁、安全 |
最小最大值 | 需遍历数组 | min()/max() | 一行实现 |
四、注意事项
-
isDigits()
不支持负数或小数。 -
isCreatable()
支持正负号、小数、十六进制、科学计数法等格式。 -
createNumber()
会自动返回适当的包装类型(Integer
、Double
、BigDecimal
等),但要注意可能抛出NumberFormatException
。 -
Commons Lang 并不适用于高精度金融计算,涉及钱财应使用
BigDecimal
。
五、总结
NumberUtils
是 Apache Commons Lang 提供的经典工具类,它简化了 Java 中数字类型的操作逻辑,是处理用户输入、配置解析和基础数值逻辑的利器。
在日常开发中,掌握 NumberUtils
的用法可以大幅提高代码的可读性和健壮性,尤其在构建通用工具模块、参数校验、表单处理等场景中表现优秀。