- 异常原因
NumberFormatException
是Java中的一个运行时异常。它通常在将一个字符串转换为数字类型(如int
、long
、float
、double
等)时抛出。当字符串的格式不符合数字的要求时,就会触发这个异常。- 例如,试图将一个包含非数字字符(除了负号、小数点等在数字格式中有意义的字符)的字符串转换为数字时会抛出此异常。像
"abc"
转换为int
或者"12.3.4"
转换为double
这样的情况。
- 解决方法
- 方法一:输入验证
- 在将字符串转换为数字之前,先对字符串进行验证,确保它符合数字的格式要求。可以使用正则表达式来验证字符串是否是合法的数字格式。
- 例如,对于整数的验证,以下是一个简单的方法来检查字符串是否只包含数字字符:
import java.util.regex.Pattern; public class Main { public static void main(String[] args) { String numberStr = "123"; boolean isInteger = Pattern.matches("\\d+", numberStr); if (isInteger) { try { int number = Integer.parseInt(numberStr); System.out.println("转换后的整数: " + number); } catch (NumberFormatException e) { System.out.println("验证通过,但转换时仍出错"); } } else { System.out.println("不是合法的整数格式"); } } }
- 在这个例子中,
Pattern.matches("\\d+", numberStr)
检查numberStr
是否只包含一个或多个数字(\\d
表示数字,+
表示一个或多个)。如果验证通过,再尝试进行转换。
- 方法二:异常处理
- 使用
try - catch
块来捕获NumberFormatException
,这样即使出现异常,程序也能继续执行而不会突然终止。 - 例如,当从用户输入获取一个可能不符合数字格式的字符串并转换为
int
时:import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入一个整数:"); try { String input = scanner.nextLine(); int number = Integer.parseInt(input); System.out.println("转换后的整数: " + number); } catch (NumberFormatException e) { System.out.println("输入的不是合法的整数格式"); } } }
- 在这个例子中,
Scanner
用于获取用户输入的字符串。然后在try
块中尝试将其转换为int
类型。如果出现NumberFormatException
,则在catch
块中输出错误提示信息。
- 使用
- 方法三:提供默认值
- 当转换失败时,可以为变量提供一个默认值,以确保程序的其他部分能够正常运行。
public class Main { public static void main(String[] args) { String numberStr = "abc"; int defaultValue = 0; try { int number = Integer.parseInt(numberStr); System.out.println("转换后的整数: " + number); } catch (NumberFormatException e) { System.out.println("转换出错,使用默认值"); numberStr = defaultValue + ""; System.out.println("现在的字符串值: " + numberStr); } } }
- 在这个例子中,当
Integer.parseInt(numberStr)
出现异常时,将numberStr
设置为默认值0
的字符串形式,然后程序可以继续使用这个默认值进行后续操作。
- 当转换失败时,可以为变量提供一个默认值,以确保程序的其他部分能够正常运行。
- 方法一:输入验证