本文概述
当我们尝试将字符串转换为数字值(例如float或integer)时, 将引发NumberFormatException, 但是输入字符串的格式不正确或不合法。非法格式表示, 如果你尝试将字符串解析为整数, 但字符串包含布尔值, 则它是非法格式。例如-如果我们尝试将字符串解析为整数, 但字符串为null。
这是一个未经检查的异常。它是IllegalArgumentException的子类, 并实现Serializable接口。
NumberFormatException的构造方法
建设者 | 描述 |
---|---|
NumberFormatException() | 这将构造一个NumberFormatException, 而没有指定的详细消息。 |
NumberFormatException(String s) | 这将在字符串s中构造一个带有指定的详细消息的NumberFormatException。 |
NumberFormatException的示例
public class Example {
public static void main(String[] args) {
int a = Integer.parseInt(null); //throws Exception as //the input string is of illegal format for parsing as it is null.
}
}
输出:
NumberFormatException的常见原因
由于NumberFormatException是由于引发异常的方法的相应参数的字符串格式不正确而发生的, 因此可以有多种方式。其中一些被提及如下-
- 提供的输入字符串可能为null-示例-Integer.parseInt(null);
- 输入字符串可能为空-示例-Integer.parseInt(“”);
- 输入字符串可能带有尾随空格-示例-Integer.parseInt(“ 123”);
- 输入字符串可能有一个前导空格-示例-Integer.parseInt(“ 123”);
- 输入字符串可以是字母数字-示例-Long.parseLong(“ b2”);
- 输入字符串的输入可能会超出存储已分析字符串的数据类型的范围-示例-Integer.parseInt(“ 135”);整数的最大可能值为127, 但字符串中的值为135, 超出范围, 因此将引发异常。
- 输入的字符串和用于解析的方法类型之间可能不匹配。如果你提供“ 1.0”之类的输入字符串, 并尝试将该字符串转换为整数值, 它将引发NumberFormatException异常。范例-Integer.parseInt(“ 1..0”);
如何避免NumberFormatException?
引发NumberFormatException的根本原因是, 输入字符串在解析为数值时格式不正确或不合法。因此, 为避免发生此异常, 必须正确设置提供的输入字符串。
要拥有有效且格式正确的字符串, 首先, 请检查输入字符串是否不为null。然后, 检查是否有不必要的空格, 然后将其全部裁剪掉, 然后进行多次检查, 以验证参数字符串是否与我们用于解析字符串的方法的类型匹配。如果方法是ParseInt(), 请检查字符串是否具有整数值, 并且对于所有其他方法, 同样进行所需的检查。
为了防止Java程序生成NumberFormatException, 始终最好将可能引发此异常的代码行封装在try-catch块中, 如下所示-
public class NumberFormatExceptionExample {
private static final String inputString = "123.33";
public static void main(String[] args) {
try {
int a = Integer.parseInt(inputString);
}catch(NumberFormatException ex){
System.err.println("Invalid string in argumment");
//request for well-formatted string
}
}
}
评论前必须登录!
注册