杰瑞科技汇

Java中String如何转为int?

Integer.parseInt()

这是最直接、最常用的方法,它属于 java.lang.Integer 类。

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

基本用法

String strNumber = "12345";
int number = Integer.parseInt(strNumber);
System.out.println(number); // 输出: 12345
System.out.println(number + 100); // 输出: 12445

处理异常(非常重要!)

String 不是有效的数字格式(包含非数字字符、为空或为 null),Integer.parseInt() 会抛出 NumberFormatException,在实际开发中,必须使用 try-catch 块来处理这种异常

String strNumber = "123abc"; // 无效的数字字符串
try {
    int number = Integer.parseInt(strNumber);
    System.out.println("转换成功: " + number);
} catch (NumberFormatException e) {
    // 当字符串无法转换为整数时,这里的代码会执行
    System.out.println("错误: 无法将字符串 '" + strNumber + "' 转换为整数。");
    // e.printStackTrace(); // 打印详细的错误堆栈信息(调试时很有用)
}

最佳实践:只要不确定输入的 String 是否总是有效的,就应该始终使用 try-catch


其他方法

除了 Integer.parseInt(),还有其他几种方式可以实现转换,各有其适用场景。

使用 Integer.valueOf()

Integer.valueOf() 也可以将 String 转换为 int,它和 parseInt() 的主要区别在于返回类型:

Java中String如何转为int?-图2
(图片来源网络,侵删)
  • Integer.parseInt(String s): 返回一个 基本数据类型 int
  • Integer.valueOf(String s): 返回一个 Integer 对象(包装类型)。

在 Java 5 之后,由于自动装箱(Autoboxing)机制,你可以直接将 Integer 对象赋值给 int 变量,所以它们在用法上看起来很像。

String strNumber = "987";
// 使用 valueOf(),返回 Integer 对象
Integer integerObject = Integer.valueOf(strNumber);
// 自动装箱,将 Integer 对象赋值给 int 变量
int number = integerObject; // 或者 int number = Integer.valueOf(strNumber);
System.out.println(number); // 输出: 987
System.out.println(integerObject instanceof Integer); // 输出: true

如何选择?

  • 如果你需要一个原始的 int 类型,使用 Integer.parseInt() 更直接,因为它避免了创建一个额外的 Integer 对象。
  • 如果你需要一个 Integer 对象(在泛型集合 List<Integer> 中),或者需要利用 Integer 类提供的其他方法,使用 Integer.valueOf()

异常处理Integer.valueOf() 同样会在转换失败时抛出 NumberFormatException,所以也需要 try-catch

使用 NumberUtils (Apache Commons Lang)

如果你在项目中使用了 Apache Commons Lang 库,可以使用 NumberUtils 来提供更安全的转换,它有一个方法可以直接返回 int,并在转换失败时返回一个默认值,从而避免异常。

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

Maven 依赖:

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

代码示例:

import org.apache.commons.lang3.math.NumberUtils;
String str1 = "555";
String str2 = "abc";
String str3 = ""; // 空字符串
String str4 = null; // null 值
// 转换成功,返回解析的值
int num1 = NumberUtils.toInt(str1);
System.out.println(num1); // 输出: 555
// 转换失败,返回默认值 0
int num2 = NumberUtils.toInt(str2);
System.out.println(num2); // 输出: 0
// 也可以指定自定义的默认值
int num3 = NumberUtils.toInt(str3, -1); // 如果转换失败,返回 -1
int num4 = NumberUtils.toInt(str4, -999); // 如果转换失败,返回 -999
System.out.println(num3); // 输出: -1
System.out.println(num4); // 输出: -999

这种方法非常简洁,特别适用于那些希望优雅地处理错误而不是抛出异常的场景。


处理不同进制的数字

Integer 类还提供了重载的 parseInt 方法,可以解析指定进制的字符串。

// 解析二进制字符串 "1010" (十进制的 10)
String binaryStr = "1010";
int fromBinary = Integer.parseInt(binaryStr, 2);
System.out.println("二进制 " + binaryStr + " 转换为十进制是: " + fromBinary); // 输出: 10
// 解析十六进制字符串 "FF" (十进制的 255)
String hexStr = "FF";
int fromHex = Integer.parseInt(hexStr, 16);
System.out.println("十六进制 " + hexStr + " 转换为十进制是: " + fromHex); // 输出: 255
// 解析八进制字符串 "10" (十进制的 8)
String octalStr = "10";
int fromOctal = Integer.parseInt(octalStr, 8);
System.out.println("八进制 " + octalStr + " 转换为十进制是: " + fromOctal); // 输出: 8

注意:传入的 radix(进制)必须在 Character.MIN_RADIX (2) 和 Character.MAX_RADIX (36) 之间,如果字符串中的字符不在该进制的有效字符范围内(在二进制字符串中出现 '2'),同样会抛出 NumberFormatException


总结与对比

方法 返回类型 是否抛出异常 优点 缺点 适用场景
Integer.parseInt() int (基本类型) (NumberFormatException) 最直接,性能最好(无对象创建) 必须手动处理异常 需要原始 int 值,且能处理异常的情况
Integer.valueOf() Integer (对象) (NumberFormatException) 返回对象,可用于泛型 有轻微的性能开销(创建对象) 需要包装类型对象,或用于泛型集合
NumberUtils.toInt() int (基本类型) (返回默认值) 代码简洁,无需 try-catch 需要引入第三方库 希望优雅处理错误,提供默认值,不希望抛出异常
Integer.parseInt(s, radix) int (基本类型) (NumberFormatException) 能解析不同进制的字符串 同样需要处理异常 需要解析二进制、八进制、十六进制等字符串

最终建议

  • 对于标准十进制转换:使用 Integer.parseInt(),并务必用 try-catch 包裹。
  • 如果需要 Integer 对象:使用 Integer.valueOf(),并用 try-catch 包裹。
  • 如果不想处理异常,且项目允许引入第三方库:使用 NumberUtils.toInt(),代码更简洁。
  • 如果需要解析不同进制:使用 Integer.parseInt(s, radix),并用 try-catch 包裹。
分享:
扫描分享到社交APP
上一篇
下一篇