方法定义(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)
使用技巧
- 进制转换:快速实现二进制/十六进制字符串转十进制整数
- 结合异常处理:用
try-catch
捕获非法输入try { int num = Integer.parseInt(input); } catch (NumberFormatException e) { System.out.println("非法数字格式!"); }
- 空白处理:显式调用
trim()
避免意外空格
常见错误
- 数字格式错误(抛出
NumberFormatException
):- 包含非数字字符(如
"12a3"
) - 空字符串或
null
- 小数点(如
"3.14"
,应使用Double.parseDouble()
) - 超出
int
范围(-2147483648
~2147483647
)
- 包含非数字字符(如
- 进制错误:
- 使用
radix=1
或radix>36
(抛出NumberFormatException
) - 字符超出进制范围(如二进制输入
"102"
)
- 使用
注意事项
- 数值范围:
- 若字符串表示的值超出
int
范围,使用Long.parseLong()
- 若字符串表示的值超出
- 空值处理:
- 直接传入
null
会抛出NullPointerException
- 直接传入
- 特殊字符串:
"+0"
和"-0"
均返回0
- 性能敏感场景:
- 避免在循环中重复解析相同字符串(可缓存结果)
最佳实践与性能优化
- 预校验字符串(正则表达式):
if (str.matches("-?\\d+")) { // 检查是否为整数格式 int num = Integer.parseInt(str); }
- 指定进制时显式传递
radix
:- 避免十六进制字符串被误解析为十进制(如
"FF"
默认解析会失败)
- 避免十六进制字符串被误解析为十进制(如
- 替代方案:
- 需要返回包装类型时用
Integer.valueOf()
(可能返回缓存对象) - 超大数字用
BigInteger
(如new BigInteger("12345678901234567890")
)
- 需要返回包装类型时用
总结
关键点 | 说明 |
---|---|
核心功能 | 字符串 → 整数转换(支持进制) |
异常处理 | 必须捕获NumberFormatException |
数值范围 | int 类型范围:-2³¹ ~ 2³¹-1(超出需用Long.parseLong() ) |
性能优化 | 避免循环重复解析;预校验字符串格式 |
替代方法 | Integer.valueOf() (返回Integer 对象)、Long.parseLong() (更大范围) |