NumberFormatException 是 Java 中的一个运行时异常,属于 java.lang 包,通常在试图将一个字符串转换成数值时出现。如果字符串的格式不符合解析为数值的要求,则会抛出此异常。例如,尝试将非数字字符(如 "abc")转换为 int、double 或其他数值类型时,就会导致 NumberFormatException。

常见场景
解析非数值字符串
如果使用
Integer.parseInt("abc")或Double.parseDouble("123.45abc")之类的代码来解析非数值字符或不完整的数字,会触发该异常。例如:
java复制代码String input = "abc";int number = Integer.parseInt(input); // 抛出 NumberFormatException
空字符串解析
空字符串
""被传递给数值解析方法(如Long.parseLong("")),也会导致NumberFormatException。例如:
java复制代码String emptyString = "";int number = Integer.parseInt(emptyString); // 抛出 NumberFormatException
超出范围的数值
试图解析的字符串数值超出了目标数据类型的范围。例如,
Integer.parseInt("2147483648")会因为超过int范围而抛出NumberFormatException。例如:
java复制代码String largeNumber = "2147483648";int number = Integer.parseInt(largeNumber); // 抛出 NumberFormatException
解决方案
使用正则表达式:在解析前,使用正则表达式来校验字符串是否为数字格式。例如:
java复制代码if (input.matches("-?\\d+")) { // 检查是否为整数格式 int number = Integer.parseInt(input); }异常捕获:使用
try-catch块捕获NumberFormatException,并处理错误以提供用户友好的反馈。java复制代码try { int number = Integer.parseInt(input); } catch (NumberFormatException e) { System.out.println("请输入有效的数字"); }提前检查输入:对于用户输入的数据,可以提前检查空值或非数值情况,确保在解析前先对数据进行有效性验证。
应用场景和注意事项
NumberFormatException在输入验证和数据转换中十分常见。在处理用户输入时,最好始终检查数据格式,避免无效输入引发的程序崩溃。在大数据和分布式系统中,数值转换可能涉及大量输入,因此捕获
NumberFormatException并优化输入格式检查对于系统的稳定性和性能很重要。