方法定义(Java标准库源码):

public static int parseInt(String s) throws NumberFormatException
public static int parseInt(String s, int radix) throws NumberFormatException
  • 参数
    • s:待转换的字符串
    • radix(可选):进制基数(2~36),默认十进制(radix=10
  • 返回值:字符串解析后的整数值(int类型)
  • 异常NumberFormatException(字符串格式非法时抛出)

功能说明

将字符串解析为带符号十进制整数(或指定进制)。

  • 支持正负号(+/-)前缀
  • 忽略字符串首尾空白(Java 7+)
  • 进制范围:2(二进制)到 36(字母z/Z表示35)

示例代码

// 1. 十进制转换
int num1 = Integer.parseInt("123");      // 123
int num2 = Integer.parseInt("+456");     // 456
int num3 = Integer.parseInt("-789");     // -789

// 2. 指定进制转换
int binary = Integer.parseInt("1010", 2);   // 10(二进制转十进制)
int hex = Integer.parseInt("FF", 16);       // 255(十六进制转十进制)

// 3. 处理字符串空白(Java 7+)
int num4 = Integer.parseInt("  42  ".trim()); // 42(推荐显式trim)

使用技巧

  1. 进制转换:快速实现二进制/十六进制字符串转十进制整数
  2. 结合异常处理:用try-catch捕获非法输入
    try {
        int num = Integer.parseInt(input);
    } catch (NumberFormatException e) {
        System.out.println("非法数字格式!");
    }
    
  3. 空白处理:显式调用trim()避免意外空格

常见错误

  1. 数字格式错误(抛出NumberFormatException):
    • 包含非数字字符(如"12a3"
    • 空字符串或null
    • 小数点(如"3.14",应使用Double.parseDouble()
    • 超出int范围(-2147483648 ~ 2147483647
  2. 进制错误
    • 使用radix=1radix>36(抛出NumberFormatException
    • 字符超出进制范围(如二进制输入"102"

注意事项

  1. 数值范围
    • 若字符串表示的值超出int范围,使用Long.parseLong()
  2. 空值处理
    • 直接传入null会抛出NullPointerException
  3. 特殊字符串
    • "+0""-0" 均返回 0
  4. 性能敏感场景
    • 避免在循环中重复解析相同字符串(可缓存结果)

最佳实践与性能优化

  1. 预校验字符串(正则表达式):
    if (str.matches("-?\\d+")) { // 检查是否为整数格式
        int num = Integer.parseInt(str);
    }
    
  2. 指定进制时显式传递radix
    • 避免十六进制字符串被误解析为十进制(如"FF"默认解析会失败)
  3. 替代方案
    • 需要返回包装类型时用Integer.valueOf()(可能返回缓存对象)
    • 超大数字用BigInteger(如new BigInteger("12345678901234567890")

总结

关键点 说明
核心功能 字符串 → 整数转换(支持进制)
异常处理 必须捕获NumberFormatException
数值范围 int类型范围:-2³¹ ~ 2³¹-1(超出需用Long.parseLong()
性能优化 避免循环重复解析;预校验字符串格式
替代方法 Integer.valueOf()(返回Integer对象)、Long.parseLong()(更大范围)