杰瑞科技汇

Java中String如何转int?

核心方法

Integer.parseInt(String s)

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

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

特点:

  • 静态方法:直接通过 Integer 类调用,如 Integer.parseInt("123")
  • 抛出异常String 不是有效的整数表示,它会抛出 NumberFormatException,这是你需要处理的最常见异常。
  • 返回值:返回一个基本数据类型 int

示例代码:

public class StringToIntExample {
    public static void main(String[] args) {
        String str1 = "123";
        String str2 = "-456";
        String str3 = "789abc"; // 无效的数字字符串
        try {
            // 成功转换
            int num1 = Integer.parseInt(str1);
            System.out.println("转换成功: " + str1 + " -> " + num1);
            int num2 = Integer.parseInt(str2);
            System.out.println("转换成功: " + str2 + " -> " + num2);
            // 尝试转换无效字符串
            int num3 = Integer.parseInt(str3); // 这里会抛出异常
            System.out.println("转换成功: " + str3 + " -> " + num3);
        } catch (NumberFormatException e) {
            System.out.println("错误: 无法将字符串 '" + str3 + "' 转换为整数。");
            // e.printStackTrace(); // 打印详细的异常堆栈信息
        }
    }
}

输出:

转换成功: 123 -> 123
转换成功: -456 -> -456
错误: 无法将字符串 '789abc' 转换为整数。

Integer.valueOf(String s)

这个方法也用于将 String 转换为 Integer 对象,它内部也调用了 parseInt 方法。

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

特点:

  • 静态方法:通过 Integer 类调用,如 Integer.valueOf("123")
  • 返回值:返回一个 Integer 对象,而不是基本数据类型 int,这在需要使用对象(例如在集合 List<Integer> 中)时非常有用。
  • 抛出异常:同样,如果字符串无效,会抛出 NumberFormatException
  • 缓存valueOf 方法会缓存一定范围内的 Integer 对象(通常是 -128 到 127),这可以提高性能并减少内存开销。

示例代码:

public class StringToIntegerObjectExample {
    public static void main(String[] args) {
        String str = "200";
        // 使用 valueOf 得到一个 Integer 对象
        Integer integerObj = Integer.valueOf(str);
        System.out.println("转换结果是一个对象: " + integerObj);
        System.out.println("对象的类型: " + integerObj.getClass().getName());
        // 你可以像使用 int 一样使用这个对象(自动拆箱)
        int num = integerObj; // 自动拆箱
        System.out.println("从对象获取的int值: " + num);
    }
}

输出:

转换结果是一个对象: 200
对象的类型: java.lang.Integer
从对象获取的int值: 200

new Integer(String s) (已过时)

这是 Integer 类的一个构造函数,它也可以将 String 转换为 Integer 对象。

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

特点:

  • 构造函数:通过创建新实例来调用,如 new Integer("123")
  • 返回值:返回一个新的 Integer 对象。
  • 抛出异常:同样会抛出 NumberFormatException
  • 已过时:从 Java 9 开始,这个构造函数被标记为 @Deprecated,官方文档推荐使用 Integer.valueOf(String),因为它可以利用缓存,性能更好,并且更符合面向对象的设计(静态工厂方法优于构造函数)。

示例代码 (不推荐使用):

// 不推荐的方式
Integer oldWayObj = new Integer("123");
System.out.println("旧方式创建的对象: " + oldWayObj);

如何选择使用哪个方法?

方法 返回值 是否推荐 主要用途
Integer.parseInt() int (基本类型) 当你需要一个原始的 int 值进行数学计算或赋值给 int 变量时。
Integer.valueOf() Integer (对象) 当你需要一个 Integer 对象时,例如存入 ListMap 等集合,或者需要利用 Integer 的方法。
new Integer() Integer (对象) 已过时,避免使用。

  • 想要 int,用 parseInt()
  • 想要 Integer 对象,用 valueOf()

最佳实践与注意事项

始终使用 try-catch 处理异常

这是最重要的一点,如果用户输入或从文件/网络读取的数据可能不是数字,parseIntvalueOf 都会失败,如果不处理异常,程序会崩溃。

String userInput = "请输入一个数字"; // 假设这是用户输入
try {
    int number = Integer.parseInt(userInput);
    System.out.println("你输入的数字是: " + number);
} catch (NumberFormatException e) {
    System.out.println("输入无效,请确保输入的是一个整数。");
}

处理带空格的字符串

parseIntvalueOf 不能直接处理前后有空格的字符串,它们会抛出 NumberFormatException

String strWithSpaces = "  123  ";
// 这行代码会抛出异常
// int num = Integer.parseInt(strWithSpaces); 
// 正确做法是先使用 trim() 方法去除首尾空格
int num = Integer.parseInt(strWithSpaces.trim());
System.out.println("去除空格后转换: " + num); // 输出: 123

处理非十进制数字

如果字符串是其他进制(如二进制、八进制、十六进制),可以使用 Integer.parseInt(String s, int radix) 的重载方法。

String binaryStr = "1010"; // 二进制的 10
String octalStr = "12";   // 八进制的 10
String hexStr = "A";      // 十六进制的 10
int numFromBinary = Integer.parseInt(binaryStr, 2);
int numFromOctal = Integer.parseInt(octalStr, 8);
int numFromHex = Integer.parseInt(hexStr, 16);
System.out.println("二进制 " + binaryStr + " 转换为十进制是: " + numFromBinary); // 10
System.out.println("八进制 " + octalStr + " 转换为十进制是: " + numFromOctal);   // 10
System.out.println("十六进制 " + hexStr + " 转换为十进制是: " + numFromHex);     // 10

处理超大数字

int 类型的范围是 -2,147,483,6482,147,483,647,如果字符串表示的数字超出了这个范围,parseInt 会抛出 NumberFormatException

如果需要处理更大的数字,应该使用 Long.parseLong()BigInteger

String bigNumberStr = "2147483648"; // 比 Integer.MAX_VALUE 还大 1
// 这会抛出 NumberFormatException
// int num = Integer.parseInt(bigNumberStr);
// 使用 Long 处理更大的范围
long bigNum = Long.parseLong(bigNumberStr);
System.out.println("使用Long转换: " + bigNum); // 输出: 2147483648
// 如果数字可能超过 Long 的范围,使用 BigInteger
import java.math.BigInteger;
String hugeNumberStr = "123456789012345678901234567890";
BigInteger hugeNum = new BigInteger(hugeNumberStr);
System.out.println("使用BigInteger转换: " + hugeNum);
场景 推荐方法 代码示例
基本需求,需要 int Integer.parseInt() int num = Integer.parseInt("123");
需要 Integer 对象 Integer.valueOf() Integer num = Integer.valueOf("123");
字符串可能无效 try-catch + parseIntvalueOf try { ... } catch (NumberFormatException e) { ... }
字符串带前后空格 trim() + parseIntvalueOf int num = Integer.parseInt(" 123 ".trim());
非十进制字符串 Integer.parseInt(s, radix) int num = Integer.parseInt("A", 16);
数字超出 int 范围 Long.parseLong()BigInteger long num = Long.parseLong("2147483648");
分享:
扫描分享到社交APP
上一篇
下一篇