NumberFormatException 是 Java 中的一个运行时异常(RuntimeException),当尝试将一个字符串转换为数值类型(如 Integer、Double、Float 等)但字符串格式不正确时抛出。
在包装器构造函数中获取 NumberFormatException 通常有以下几种原因:
// 示例1:包含非数字字符
Integer i1 = new Integer("123a"); // 抛出NumberFormatException
// 示例2:空字符串
Integer i2 = new Integer(""); // 抛出NumberFormatException
// 示例3:浮点数转整数
Integer i3 = new Integer("123.45"); // 抛出NumberFormatException
// 示例4:超出范围
Integer i4 = new Integer("99999999999999999999"); // 抛出NumberFormatException
try {
Integer number = new Integer(inputString);
// 成功转换后的处理
} catch (NumberFormatException e) {
// 处理转换失败的情况
System.err.println("输入字符串 '" + inputString + "' 不是有效的整数");
}
public static boolean isNumeric(String str) {
return str != null && str.matches("-?\\d+(\\.\\d+)?");
}
if (isNumeric(inputString)) {
Integer number = new Integer(inputString);
} else {
System.err.println("输入字符串 '" + inputString + "' 不是有效的数字");
}
public static Optional<Integer> parseInteger(String s) {
try {
return Optional.of(new Integer(s));
} catch (NumberFormatException e) {
return Optional.empty();
}
}
// 使用方式
parseInteger(inputString).ifPresent(number -> {
// 使用转换后的数字
});
public class NumberUtils {
public static Integer safeParseInt(String s, Integer defaultValue) {
try {
return new Integer(s);
} catch (NumberFormatException e) {
return defaultValue;
}
}
}
// 使用方式
Integer number = NumberUtils.safeParseInt(inputString, 0); // 转换失败返回0
Integer.valueOf()
而不是构造函数Integer.parseInt()
的变体,它们提供了更好的错误处理从 Java 9 开始,包装类的构造函数(如 new Integer()
)已被标记为 @Deprecated
,推荐使用静态工厂方法如 Integer.valueOf()
或解析方法如 Integer.parseInt()
。这些方法在功能上是等效的,但使用工厂方法可以更好地利用缓存机制。