1. 什么是InputFormatException?
InputFormatException是Java中的一个异常类型,也就是用户输入格式异常。当Java程序接收到不符合规范的数据格式时,就会抛出InputFormatException异常。
在Java中,输入输出流是非常常见的操作。如果用户输入的数据格式不正确,程序就会无法正确执行下去。比如读取文件时,如果文件格式错误,就会抛出InputFormatException;如果从控制台读取用户输入时,如果用户输入的数据格式不正确,也会抛出InputFormatException。
2. InputFormatException发生的原因
InputFormatException通常是由数据格式不正确引起的,具体原因如下:
2.1 输入值类型不匹配
比如一个方法参数应该是整形,而用户传入的是字符串类型的数据,这种情况就会抛出InputFormatException异常。
int num = Integer.parseInt("abc"); // 报InputFormatException异常
2.2 输入数据格式不正确
比如读取csv文件时,如果文件格式错误,例如某一列数据的格式不正确,就会抛出InputFormatException异常。
Scanner scanner = new Scanner(new File("file.csv"));
scanner.useDelimiter(",");
while(scanner.hasNext()){
String str = scanner.next();
int num = Integer.parseInt(str); // 如果str不是数字字符串,会抛InputFormatException异常
}
2.3 输入数据长度过长
例如输入框的最大字符数为10,但用户输入了11个字符,这种情况就会抛出InputFormatException异常。
String str = "12345678901";
if(str.length() > 10){ // 如果字符串长度超过了10,就会抛InputFormatException异常
throw new InputFormatException("输入长度过长");
}
3. 解决InputFormatException的方法
下面列举几种解决InputFormatException的方法:
3.1 使用try-catch捕获异常
使用try-catch捕获异常是Java中比较常见的做法。当程序抛出InputFormatException异常时,catch块中的代码会执行。
try{
String str = "abc";
int num = Integer.parseInt(str); // 这里会抛InputFormatException异常
}catch(InputFormatException e){
e.printStackTrace();
}
3.2 使用正则表达式匹配输入值
使用正则表达式可以限制用户的输入格式,只允许输入指定格式的数据,比如限制用户输入数字。
String str = "abc";
Pattern pattern = Pattern.compile("^[0-9]*$");
if(pattern.matcher(str).matches()){ // 如果只允许输入数字,这里会抛出InputFormatException异常
throw new InputFormatException("输入值不合法");
}
3.3 增加输入值范围限制
输入值范围限制可以限制用户输入数据的规模,比如只允许输入1到100的整数。
int num = 101;
if(num < 1 || num > 100){ // 如果只允许输入1到100的整数,这里会抛出InputFormatException异常
throw new InputFormatException("输入值不在范围内");
}
4. 总结
InputFormatException是Java中比较常见的异常类型,通常是由于用户输入的数据格式不正确引起的。要解决InputFormatException,可以使用try-catch捕获异常、使用正则表达式匹配输入值或增加输入值范围限制等方法。在实际开发中,我们需要根据业务需求,选择合适的方法解决InputFormatException问题,提高程序的稳定性和健壮性。