首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

NumberFormatException int无效

NumberFormatException 是 Java 中常见的运行时异常之一,通常发生在尝试将一个字符串转换为数值类型(如 intfloatdouble 等)时,如果字符串的格式不符合数值类型的规范,就会抛出这个异常。

基础概念

NumberFormatException 属于 java.lang.RuntimeException 的子类,表示在将字符串转换为数值类型时发生了格式错误。

相关优势

  • 明确性:异常提供了明确的错误信息,帮助开发者快速定位问题。
  • 安全性:通过捕获和处理异常,可以避免程序因错误输入而崩溃。

类型

  • NumberFormatException:最通用的类型,适用于所有数值类型的转换失败。
  • 其他具体类型:如 IllegalArgumentException 在某些情况下也可能用于表示非法参数。

应用场景

  • 用户输入验证:在处理用户输入时,确保输入的字符串可以安全地转换为数值类型。
  • 数据解析:在读取配置文件或数据库时,验证数据的格式是否正确。

常见原因及解决方法

原因1:字符串包含非数字字符

例如:

代码语言:txt
复制
int num = Integer.parseInt("abc");

解决方法: 在转换前检查字符串是否只包含数字字符。

代码语言:txt
复制
public static int safeParseInt(String str) {
    if (str == null || !str.matches("\\d+")) {
        throw new IllegalArgumentException("Invalid number format");
    }
    return Integer.parseInt(str);
}

原因2:字符串为空或null

例如:

代码语言:txt
复制
int num = Integer.parseInt(null);

解决方法: 在转换前检查字符串是否为空或null。

代码语言:txt
复制
public static int safeParseInt(String str) {
    if (str == null || str.isEmpty()) {
        throw new IllegalArgumentException("Input string is null or empty");
    }
    return Integer.parseInt(str);
}

原因3:数值超出目标类型的范围

例如:

代码语言:txt
复制
int num = Integer.parseInt("2147483648"); // 超出int的最大值

解决方法: 使用更大范围的数值类型,如 long

代码语言:txt
复制
long num = Long.parseLong("2147483648");

示例代码

以下是一个综合示例,展示了如何安全地进行字符串到整数的转换:

代码语言:txt
复制
public class NumberFormatExceptionExample {
    public static void main(String[] args) {
        try {
            int num = safeParseInt("123"); // 正常情况
            System.out.println("Parsed number: " + num);

            num = safeParseInt("abc"); // 抛出异常
        } catch (IllegalArgumentException e) {
            System.err.println("Error: " + e.getMessage());
        }
    }

    public static int safeParseInt(String str) {
        if (str == null || str.isEmpty()) {
            throw new IllegalArgumentException("Input string is null or empty");
        }
        if (!str.matches("\\d+")) {
            throw new IllegalArgumentException("Invalid number format");
        }
        return Integer.parseInt(str);
    }
}

通过这种方式,可以有效避免 NumberFormatException 并提高代码的健壮性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • int a; int* a; int** a; int (*a)[]; int (*a)(int)

    a) int a;表示一个内存空间,这个空间用来存放一个整数(int); b) int* a;表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个存放整数的空间,即a)中提到的空间; c) int...e) int (*a)(int);表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个函数,这个函数有一个类型为int的参数,并且函数的返回类型也是int。...(可以结合函数指针一并看看......) int*p[4]------p是一个指针数组,每一个指向一个int型的 int (*q)[4]---------q是一个指针,指向int[4]的数组。...int (*q)[4]的存储结构如下: 请看以下定义: int a[2][4]={ {2,5,6,8},{22,55,66,88}}; int c[4]={5,8,9,4}; int d[3...)a:与(int&;)a_(int)-专业指导文档类资源-CSDN文库

    2.3K10

    C# int int16 Int32 Int64的介绍

    C# int int16 Int32 Int64的介绍 今天看到别人的代码中用到Int32,UInt32相关,想到自己平时用的都是int类型整数,就心生好奇的翻了一下资料: ---- Int32 值类型表示值介于...Int16 值类型表示值介于 -32768 到 +32767 之间的有符号整数。...类型 范围 大小 .NETFramework 类型 short [-2^15 , 2^15 -1] 有符号16位数 System.Int16 int 关键字表示一种整型,该类型根据下表显示的大小和范围存储值...类型 范围 大小 .NETFramework 类型 int [-2^31 , 2^31 -1] 有符号32位数 System.Int32 long 关键字表示一种整型,该类型根据下表显示的大小和范围存储值...类型是unsigned int派生出来的 int是带符号的,表示范围是:-21474 83647 到 21474 83648 uint是不带符号整形,表示范围是0到42949 67295(2^32-1)

    3.4K30
    领券