杰瑞科技汇

Java字符串如何转int?

核心方法概览

方法 来源 描述 优点 缺点
Integer.parseInt() java.lang.Integer 最常用、最标准的方法,将字符串解析为 int 基本类型。 直接、高效,符合面向对象编程中“基本类型优先”的原则。 如果字符串格式不正确,会抛出 NumberFormatException
Integer.valueOf() java.lang.Integer 将字符串解析为 Integer 对象(包装类型)。 可以利用自动拆箱机制得到 int,代码可读性好。 会创建一个新的 Integer 对象(在 -128 到 127 范围外),性能略低于 parseInt
NumberUtils.toInt() Apache Commons Lang Apache Commons Lang 工具类提供的方法。 非常方便,提供了默认值,无需自己写 try-catch 逻辑。 需要引入第三方库 commons-lang3,不适合轻量级项目。

Integer.parseInt() (最推荐)

这是最标准、最常用的方法,它直接将字符串转换为 int 基本类型。

Java字符串如何转int?-图1
(图片来源网络,侵删)

语法

public static int parseInt(String s) throws NumberFormatException;

代码示例

public class StringToIntExample {
    public static void main(String[] args) {
        String strNumber = "12345";
        try {
            // 使用 Integer.parseInt() 将字符串转换为 int
            int number = Integer.parseInt(strNumber);
            System.out.println("转换成功!整数是: " + number);
            System.out.println("类型: " + ((Object)number).getClass().getName()); // 输出基本类型 int
            // 另一个例子
            String negativeStr = "-789";
            int negativeNum = Integer.parseInt(negativeStr);
            System.out.println("转换成功!负数是: " + negativeNum);
        } catch (NumberFormatException e) {
            // 如果字符串不是一个有效的整数表示,会抛出此异常
            System.err.println("错误:字符串 '" + strNumber + "' 不是有效的整数。");
            e.printStackTrace();
        }
    }
}

输出:

转换成功!整数是: 12345
类型: int
转换成功!负数是: -789

异常处理

如果字符串无法被解析为整数,Integer.parseInt() 会抛出 NumberFormatException,字符串包含非数字字符、为空或超出 int 范围。

String invalidStr1 = "123a"; // 包含字母
String invalidStr2 = "";     // 空字符串
String invalidStr3 = "999999999999999999999"; // 超出 int 范围
try {
    Integer.parseInt(invalidStr1);
} catch (NumberFormatException e) {
    System.out.println("捕获异常: " + e.getMessage()); // 输出: For input string: "123a"
}

Integer.valueOf()

这个方法将字符串解析为 Integer 对象(包装类型),在现代 Java(1.5+)中,由于自动拆箱机制,你可以直接将它用在需要 int 的地方,它会自动转换为基本类型。

语法

public static Integer valueOf(String s) throws NumberFormatException;

代码示例

public class StringToIntegerObjectExample {
    public static void main(String[] args) {
        String strNumber = "9876";
        try {
            // 使用 Integer.valueOf() 将字符串转换为 Integer 对象
            Integer integerObject = Integer.valueOf(strNumber);
            System.out.println("转换成功!Integer 对象是: " + integerObject);
            System.out.println("类型: " + integerObject.getClass().getName()); // 输出 java.lang.Integer
            // 自动拆箱:可以直接在需要 int 的地方使用
            int number = integerObject; // 自动从 Integer 拆箱为 int
            System.out.println("拆箱后的整数是: " + number);
            System.out.println("类型: " + ((Object)number).getClass().getName()); // 输出 int
        } catch (NumberFormatException e) {
            System.err.println("错误:字符串不是有效的整数。");
            e.printStackTrace();
        }
    }
}

输出:

Java字符串如何转int?-图2
(图片来源网络,侵删)
转换成功!Integer 对象是: 9876
类型: java.lang.Integer
拆箱后的整数是: 9876
类型: int

parseInt vs valueOf 的选择

  • 性能parseInt 通常比 valueOf 稍快一点,因为它直接返回基本类型,而 valueOf 需要创建一个对象(尽管在 -128 到 127 范围内,JVM 会缓存对象,性能差异很小)。
  • 使用场景
    • 如果你明确需要一个 int 基本类型,优先使用 parseInt,这更清晰,也更符合意图。
    • 如果你需要一个 Integer 对象(要存入一个 List<Integer>),或者利用自动拆箱的便利性,可以使用 valueOf

NumberUtils.toInt() (第三方库)

如果你已经在项目中使用了 Apache Commons Lang 库,这个方法非常方便,因为它允许你提供一个默认值,当转换失败时不会抛出异常。

准备工作

需要在你的项目中添加 commons-lang3 依赖。

Maven (pom.xml):

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version> <!-- 使用最新版本 -->
</dependency>

Gradle (build.gradle):

Java字符串如何转int?-图3
(图片来源网络,侵删)
implementation 'org.apache.commons:commons-lang3:3.12.0' // 使用最新版本

代码示例

import org.apache.commons.lang3.math.NumberUtils;
public class StringToIntWithDefaultExample {
    public static void main(String[] args) {
        String validStr = "555";
        String invalidStr = "hello";
        String nullStr = null;
        // 转换成功,返回解析后的值
        int num1 = NumberUtils.toInt(validStr);
        System.out.println("转换成功: " + num1); // 输出 555
        // 转换失败,返回默认值 0
        int num2 = NumberUtils.toInt(invalidStr);
        System.out.println("转换失败,使用默认值: " + num2); // 输出 0
        // 字符串为 null,返回默认值 0
        int num3 = NumberUtils.toInt(nullStr);
        System.out.println("字符串为 null,使用默认值: " + num3); // 输出 0
        // 提供自定义默认值
        int num4 = NumberUtils.toInt(invalidStr, -1);
        System.out.println("转换失败,使用自定义默认值: " + num4); // 输出 -1
    }
}

总结与最佳实践

场景 推荐方法 理由
通用、标准场景 Integer.parseInt() 最直接、最符合 Java 习惯,性能好,是面试和日常开发的首选。
需要处理 null 或异常,且不想用 try-catch Integer.valueOf() + 自动拆箱 如果你能确定字符串格式正确,或者 try-catch 的逻辑更清晰,则此方法也可。
项目已引入 Apache Commons Lang NumberUtils.toInt() 非常简洁,提供了默认值,避免了样板代码的 try-catch 块,代码更健壮。
字符串可能为 null 或格式不确定 try-catch 包裹 Integer.parseInt() 这是处理不确定输入最健壮的方式,可以精确地处理每种错误情况。

最终建议:

对于绝大多数情况,使用 Integer.parseInt() 并配合 try-catch是最佳实践,它能让你清晰地处理转换失败的情况,并且不依赖任何第三方库。

// 最佳实践示例
public static int convertToInt(String str) {
    if (str == null || str.trim().isEmpty()) {
        // 可以选择返回一个默认值,或者抛出自定义异常
        return 0; 
    }
    try {
        return Integer.parseInt(str);
    } catch (NumberFormatException e) {
        // 记录日志或进行其他错误处理
        System.err.println("无法将字符串 '" + str + "' 转换为整数。");
        return 0; // 或者抛出一个更明确的业务异常
    }
}
分享:
扫描分享到社交APP
上一篇
下一篇