Java语言中有很多异常情况需要处理,其中一个常见的异常就是“for input string”异常。这种异常通常发生在程序中需要将字符串转为数字的地方,但是给定的字符串格式不正确导致转换失败。本文将介绍这种异常的原因、避免方法以及示例代码。
一、异常原因
在Java程序中,当需要将字符串转为数字时,通常会使用Integer.parseInt()或者Double.parseDouble()等方法进行转换。这些方法将给定的字符串解析为数字,并返回一个整型或浮点数。但是,如果给定的字符串格式不正确,就会导致解析失败,此时就会抛出“For input string”异常。
例如,当使用Integer.parseInt()方法将字符串“123a”转为整型时,就会抛出“For input string: "123a"”异常,因为字符串中包含非数字字符“a”。
二、异常避免方法
要避免“For input string”异常,需要注意以下几点:
1.检查输入的字符串格式
在将字符串转为数字前,必须检查它的格式是否正确。如果字符串格式正确,即只包含数字字符,就可以使用Integer.parseInt()或Double.parseDouble()方法将其转为数字。如果字符串格式不正确,应该给出提示信息,而不是直接转换并导致异常抛出。
例如,在使用Scanner读取用户输入时,可以先读取字符串,然后使用正则表达式判断字符串是否只包含数字,并将其转为数字。以下是一个示例代码:
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个整数:");
String input = scanner.nextLine();
if(input.matches("\\d+")) {
int num = Integer.parseInt(input);
System.out.println("您输入的整数为:" + num);
} else {
System.out.println("输入格式错误!");
}
scanner.close();
}
}
在该示例代码中,使用正则表达式“\d+”判断输入的字符串是否只包含数字。如果字符串格式正确,使用Integer.parseInt()方法将其转为整型;如果格式不正确,输出“输入格式错误!”。
2.处理NumberFormatException异常
在使用Integer.parseInt()或Double.parseDouble()方法进行转换时,如果给定的字符串格式不正确,会抛出NumberFormatException异常。因此,在使用这些方法时,必须处理这种异常。处理异常的方法有两种:
a)使用try-catch语句处理异常:
try {
int num = Integer.parseInt("123a");
System.out.println("转换结果:" + num);
} catch(NumberFormatException e) {
System.out.println("字符串格式不正确!");
}
在该代码中,当给定的字符串“123a”无法转为整型时,就会抛出NumberFormatException异常。使用try-catch语句捕获异常,并输出“字符串格式不正确!”提示信息。
b)使用Integer.parseInt()或Double.parseDouble()方法的返回值判断是否转换成功:
String input = "123a";
Integer num = null;
try {
num = Integer.parseInt(input);
} catch(NumberFormatException e) {
System.out.println("字符串格式不正确!");
}
if(num != null) {
System.out.println("转换结果:" + num);
}
在该代码中,将Integer.parseInt()方法返回值赋给一个Integer类型的变量num,如果方法执行成功,num的值就是转换后的整型值;如果执行失败,num的值为null。在判断num的值不为null时,才输出转换结果。
三、示例代码
下面是一段使用Scanner读取用户输入并将其转为双精度浮点数的示例代码:
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个浮点数:");
String input = scanner.nextLine();
try {
double num = Double.parseDouble(input);
System.out.println("您输入的浮点数为:" + num);
} catch(NumberFormatException e) {
System.out.println("字符串格式不正确!");
}
scanner.close();
}
}
该示例代码读取用户输入的字符串并使用Double.parseDouble()方法将其转为浮点数,如果转换失败,就会捕获NumberFormatException异常并输出提示信息。如果转换成功,就输出用户输入的浮点数。