杰瑞科技汇

Java String转int有几种方法?

下面我将从最简单的方法开始,逐步介绍更健壮和灵活的方法,并解释它们之间的区别和最佳实践。

Java String转int有几种方法?-图1
(图片来源网络,侵删)

核心方法:Integer.parseInt()

这是最直接、最常用的方法,它会尝试将一个 String 解析为一个有符号的十进制整数。

基本用法

public class Main {
    public static void main(String[] args) {
        String strNumber = "123";
        int number = Integer.parseInt(strNumber);
        System.out.println(number);          // 输出: 123
        System.out.println(number + 100);    // 输出: 223 (可以正常进行数学运算)
    }
}

重要:处理异常(NumberFormatException

parseInt() 方法有一个非常重要的特性:String 不能被解析为有效的整数,它会抛出 NumberFormatException 异常

在实际开发中,你必须使用 try-catch 语句来处理这种可能性,否则程序可能会意外终止。

public class Main {
    public static void main(String[] args) {
        String validStr = "456";
        String invalidStr1 = "abc";       // 不是数字
        String invalidStr2 = "12.3";      // 是浮点数
        String invalidStr3 = "";          // 空字符串
        String invalidStr4 = "2147483648"; // 超过 int 的最大值
        // --- 正常情况 ---
        try {
            int num1 = Integer.parseInt(validStr);
            System.out.println("转换成功: " + num1);
        } catch (NumberFormatException e) {
            System.out.println("转换 '" + validStr + "' 失败: " + e.getMessage());
        }
        // --- 异常情况 ---
        try {
            int num2 = Integer.parseInt(invalidStr1);
            System.out.println("转换成功: " + num2);
        } catch (NumberFormatException e) {
            // 这里的代码会被执行
            System.out.println("转换 '" + invalidStr1 + "' 失败: " + e.getMessage());
        }
        try {
            int num3 = Integer.parseInt(invalidStr2);
            System.out.println("转换成功: " + num3);
        } catch (NumberFormatException e) {
            System.out.println("转换 '" + invalidStr2 + "' 失败: " + e.getMessage());
        }
        try {
            int num4 = Integer.parseInt(invalidStr3);
            System.out.println("转换成功: " + num4);
        } catch (NumberFormatException e) {
            System.out.println("转换 '" + invalidStr3 + "' 失败: " + e.getMessage());
        }
        try {
            int num5 = Integer.parseInt(invalidStr4);
            System.out.println("转换成功: " + num5);
        } catch (NumberFormatException e) {
            System.out.println("转换 '" + invalidStr4 + "' 失败: " + e.getMessage());
        }
    }
}

输出结果:

Java String转int有几种方法?-图2
(图片来源网络,侵删)
转换成功: 456
转换 'abc' 失败: For input string: "abc"
转换 '12.3' 失败: For input string: "12.3"
转换 '' 失败: For input string: ""
转换 '2147483648' 失败: For input string: "2147483648"

其他方法

除了 parseInt()Integer 类还提供了其他相关的方法,以适应不同的需求。

Integer.valueOf()

这个方法也用于将 String 转换为 int,但它返回的是一个 Integer 对象(即 int 的包装类型),而不是原始的 int 类型。

  • Integer.parseInt(str) -> 返回 int (原始类型)
  • Integer.valueOf(str) -> 返回 Integer (对象)
String strNumber = "789";
// 使用 valueOf() 得到一个 Integer 对象
Integer integerObject = Integer.valueOf(strNumber);
// 这个对象可以自动拆箱为 int
int number = integerObject; // 自动拆箱
// 或者直接用在需要 int 的地方
System.out.println(integerObject + 10); // 输出: 799
// 也可以直接转换
int anotherNumber = Integer.valueOf(strNumber); // 内部其实也调用了 parseInt()

什么时候用 valueOf

  • 当你需要一个 Integer 对象时,例如在集合(如 List<Integer>)中存储。
  • 当你需要利用 Integer 缓存机制时(JVM 会缓存 -128 到 127 之间的 Integer 对象,valueOf() 会优先从缓存中获取)。

对于单纯的数字转换,parseInt() 更常用,因为它直接返回原始类型,开销更小。


处理带空格的字符串

用户输入的字符串可能前后会有多余的空格(" 123 "),直接使用 parseInt() 会抛出异常。

为了处理这种情况,可以在转换前使用 String.trim() 方法来去除首尾的空格。

String strWithSpaces = "  456  ";
try {
    // 必须先 trim 再 parseInt
    int number = Integer.parseInt(strWithSpaces.trim());
    System.out.println("转换成功: " + number); // 输出: 转换成功: 456
} catch (NumberFormatException e) {
    System.out.println("转换失败: " + e.getMessage());
}

处理不同进制的字符串

parseInt 还有一个重载版本,可以让你指定数字的进制(基数,radix)。

// 语法: Integer.parseInt(String s, int radix)
// radix: 进制,2 (二进制), 8 (八进制), 16 (十六进制)
// 十六进制字符串
String hexStr = "FF";
int hexValue = Integer.parseInt(hexStr, 16);
System.out.println("FF (十六进制) = " + hexValue); // 输出: FF (十六进制) = 255
// 八进制字符串
String octStr = "10";
int octValue = Integer.parseInt(octStr, 8);
System.out.println("10 (八进制) = " + octValue); // 输出: 10 (八进制) = 8
// 二进制字符串
String binStr = "1010";
int binValue = Integer.parseInt(binStr, 2);
System.out.println("1010 (二进制) = " + binValue); // 输出: 1010 (二进制) = 10

总结与最佳实践

方法 返回类型 描述 优点 缺点 推荐场景
Integer.parseInt() int (原始类型) 将字符串解析为十进制整数。 直接返回基本类型,性能好。 必须处理 NumberFormatException 绝大多数情况下的首选,当你需要一个 int 值时。
Integer.valueOf() Integer (对象) 将字符串解析为 Integer 对象。 返回对象,可用于集合,利用缓存。 返回对象,开销稍大。 当你需要一个 Integer 对象时(如泛型集合)。
Integer.parseInt(str.trim()) int (原始类型) 先去除字符串首尾空格,再解析。 容错性更好,能处理带空格的输入。 需要额外调用 trim() 当输入可能包含不可见的空格时。
Integer.parseInt(s, radix) int (原始类型) 按指定进制解析字符串。 功能强大,可处理非十进制数字。 需要理解进制概念。 处理二进制、八进制、十六进制等字符串时。

最终推荐方案

在将用户输入或不确定来源的 String 转换为 int 时,最健壮、最安全的方法是:

public static int safeStringToInt(String str) {
    if (str == null || str.trim().isEmpty()) {
        // 可以返回一个默认值,或者抛出自定义异常
        return 0; 
    }
    try {
        return Integer.parseInt(str.trim());
    } catch (NumberFormatException e) {
        // 可以记录日志,或者返回一个默认值
        System.err.println("无法将字符串 '" + str + "' 转换为整数。");
        return 0; // 返回一个默认值,如 0 或 -1
    }
}
// 使用示例
public class Main {
    public static void main(String[] args) {
        System.out.println(safeStringToInt("123"));    // 123
        System.out.println(safeStringToInt("  -456  ")); // -456
        System.out.println(safeStringToInt("abc"));    // 0 (并打印错误信息)
        System.out.println(safeStringToInt(""));      // 0
        System.out.println(safeStringToInt(null));    // 0
    }
}

这个封装方法处理了 null、空字符串、前后空格和非法格式,是一个非常实用的工具函数。

分享:
扫描分享到社交APP
上一篇
下一篇