java如何判断字符串是数字
使用正则表达式匹配
正则表达式可以高效验证字符串是否为数字格式。以下示例支持整数、小数(含正负号)的匹配:
public static boolean isNumeric(String str) {
return str.matches("-?\\d+(\\.\\d+)?");
}
-? 表示可选负号,\\d+ 匹配至少一位数字,(\\.\\d+)? 匹配可选的小数部分。
使用 Java 内置方法
对于纯整数判断,可利用 Character.isDigit() 遍历字符:
public static boolean isNumeric(String str) {
for (char c : str.toCharArray()) {
if (!Character.isDigit(c)) return false;
}
return true;
}
注意:此方法不支持负数或小数,需额外处理符号和小数点。

异常捕获法
通过尝试将字符串转换为数字类型,捕获异常判断:
public static boolean isNumeric(String str) {
try {
Double.parseDouble(str);
return true;
} catch (NumberFormatException e) {
return false;
}
}
此方法兼容性最强,但性能略低于正则表达式。

Apache Commons Lang 工具包
使用第三方库的现成方法:
import org.apache.commons.lang3.math.NumberUtils;
public static boolean isNumeric(String str) {
return NumberUtils.isCreatable(str);
}
该方法支持多种数字格式(包括科学计数法),需添加依赖:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
处理特殊需求场景
若需排除科学计数法或十六进制数,可调整正则表达式:
// 仅匹配十进制整数和小数
return str.matches("-?(0|[1-9]\\d*)(\\.\\d+)?");
此表达式避免前导零(如 0123)的误判。






