杰瑞科技汇

Java String如何安全转int?

最常用和推荐的方法:Integer.parseInt()

这是将字符串转换为基本数据类型 int 的标准方法。

Java String如何安全转int?-图1
(图片来源网络,侵删)

语法

public static int parseInt(String s) throws NumberFormatException

特点

  • 返回值:基本数据类型 int
  • 异常处理:如果字符串不是一个有效的整数表示(包含非数字字符、为空、超出 int 范围等),它会抛出 NumberFormatException 异常,在使用时通常需要配合 try-catch 语句。

示例代码

public class StringToIntExample {
    public static void main(String[] args) {
        String str1 = "123";
        String str2 = "-456";
        String str3 = "7890"; // 一个有效的数字
        String str4 = "12a45"; // 包含非数字字符
        String str5 = "";     // 空字符串
        String str6 = "2147483648"; // 超过int最大值
        // --- 成功转换的情况 ---
        try {
            int num1 = Integer.parseInt(str1);
            System.out.println("字符串 '" + str1 + "' 转换为 int: " + num1);
            System.out.println("类型: " + ((Object)num1).getClass().getSimpleName()); // 输出 int
            int num2 = Integer.parseInt(str2);
            System.out.println("字符串 '" + str2 + "' 转换为 int: " + num2);
            int num3 = Integer.parseInt(str3);
            System.out.println("字符串 '" + str3 + "' 转换为 int: " + num3);
        } catch (NumberFormatException e) {
            System.out.println("转换 '" + str1 + "' 或 '" + str2 + "' 或 '" + str3 + "' 时发生错误: " + e.getMessage());
        }
        System.out.println("------------------------------------");
        // --- 转换失败的情况 ---
        try {
            // 这会抛出 NumberFormatException
            int num4 = Integer.parseInt(str4);
            System.out.println("字符串 '" + str4 + "' 转换为 int: " + num4);
        } catch (NumberFormatException e) {
            System.out.println("转换 '" + str4 + "' 失败: " + e.getMessage());
        }
        try {
            // 这会抛出 NumberFormatException
            int num5 = Integer.parseInt(str5);
            System.out.println("字符串 '" + str5 + "' 转换为 int: " + num5);
        } catch (NumberFormatException e) {
            System.out.println("转换 '" + str5 + "' 失败: " + e.getMessage());
        }
        try {
            // 这会抛出 NumberFormatException
            int num6 = Integer.parseInt(str6);
            System.out.println("字符串 '" + str6 + "' 转换为 int: " + num6);
        } catch (NumberFormatException e) {
            System.out.println("转换 '" + str6 + "' 失败: " + e.getMessage());
        }
    }
}

输出结果:

字符串 '123' 转换为 int: 123
类型: int
字符串 '-456' 转换为 int: -456
字符串 '7890' 转换为 int: 7890
------------------------------------
转换 '12a45' 失败: For input string: "12a45"
转换 '' 失败: For input string: ""
转换 '2147483648' 失败: For input string: "2147483648"

其他方法

除了 parseInt(),还有其他几种方式可以实现转换,但它们有不同的用途。

a. Integer.valueOf()

这个方法将字符串转换为 Integer 对象,也就是基本类型 int包装类

语法

public static Integer valueOf(String s) throws NumberFormatException

特点

  • 返回值Integer 对象(一个对象,而不是基本类型)。
  • 异常处理:同样会抛出 NumberFormatException
  • parseInt() 的区别parseInt() 返回 int,而 valueOf() 返回 Integer,在 Java 中,基本类型和对象是不同的。valueOf() 会在内部调用 parseInt() 来完成转换工作。

示例代码

public class ValueOfExample {
    public static void main(String[] args) {
        String str = "100";
        // 使用 valueOf() 转换
        Integer integerObj = Integer.valueOf(str);
        System.out.println("转换结果: " + integerObj);
        System.out.println("类型: " + integerObj.getClass().getSimpleName()); // 输出 Integer
        // 如果你需要一个基本类型 int,可以再进行自动拆箱
        int primitiveInt = integerObj; // 自动拆箱
        System.out.println("拆箱后的基本类型: " + primitiveInt);
        System.out.println("拆箱后的类型: " + ((Object)primitiveInt).getClass().getSimpleName()); // 输出 int
    }
}

什么时候用 valueOf() 当你需要一个 Integer 对象(在泛型集合 List<Integer> 中)时,应该使用 valueOf(),如果你只需要一个数字来进行计算,parseInt() 更直接。

Java String如何安全转int?-图2
(图片来源网络,侵删)

b. 使用 Integer 构造函数 (不推荐)

在 Java 9 之前,可以使用 Integer 的构造函数来创建一个 Integer 对象。

// Java 9 之前可用,但已废弃
Integer integerObj = new Integer("123");

为什么不推荐?

  • 性能较差:创建一个新对象比调用静态方法要慢。
  • 已废弃:从 Java 9 开始,这个构造函数被标记为 @Deprecated,官方文档建议使用 parseInt()valueOf() 来替代。

c. 使用 Scanner

如果你正在从控制台或文件中读取数据,Scanner 类可以很方便地将读取的字符串直接转换为 int

示例代码

import java.util.Scanner;
public class ScannerExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个整数: ");
        if (scanner.hasNextInt()) { // 检查下一个输入是否是整数
            int number = scanner.nextInt(); // 直接读取为 int
            System.out.println("你输入的整数是: " + number);
        } else {
            System.out.println("输入的不是有效的整数。");
        }
        scanner.close();
    }
}

适用场景:主要用于从数据源(如 System.in, 文件)中解析和读取数值,而不是从一个已有的 String 变量转换。

Java String如何安全转int?-图3
(图片来源网络,侵删)

总结与对比

方法 返回类型 是否抛出 NumberFormatException 主要用途
Integer.parseInt(String) int (基本类型) 最常用,将字符串转换为基本类型 int,用于数学计算等场景。
Integer.valueOf(String) Integer (对象) 将字符串转换为 Integer 对象,当你需要一个对象时使用(如泛型集合)。
new Integer(String) (已废弃) Integer (对象) 不推荐,性能差,已被 valueOf() 替代。
Scanner.nextInt() int (基本类型) 是(如果输入不匹配) Scanner 的数据源(如控制台)读取并解析下一个 int 值。

最佳实践建议

  1. 如果你需要基本类型 int:直接使用 Integer.parseInt()

    int myInt = Integer.parseInt(myString);
  2. 如果你需要一个 Integer 对象:使用 Integer.valueOf()

    Integer myInteger = Integer.valueOf(myString);
  3. 始终进行异常处理:因为输入的字符串可能无效,所以强烈建议将转换逻辑放在 try-catch 块中,以优雅地处理可能的 NumberFormatException

    try {
        int number = Integer.parseInt(userInput);
        // 使用 number 进行后续操作
    } catch (NumberFormatException e) {
        System.out.println("错误:请输入一个有效的数字。");
        // 进行错误处理或提示用户重新输入
    }
分享:
扫描分享到社交APP
上一篇
下一篇