在 Java 中,有多种方法可以将 Java 字符串转换为 int 值。
Integer.parseInt()
parseInt()
用来讲字符创直接转换为 int,有两个重载形式:
public static int parseInt(String s) throws NumberFormatException {...}
public static int parseInt(String s, int radix) throws NumberFormatException {...}
如果有以下几种情况,将会导致异常 NumberFormatException
,为 null
、""
、非数字
。
Integer.parseInt(null);
Integer.parseInt("");
Integer.parseInt("AF");
默认将基于 10 进制做转换:
int intVal = Integer.parseInt("101");
System.out.println(intVal);
101
可以通过第二个参数指定为 8 进制:
int intVal = Integer.parseInt("101",8);
System.out.println(intVal);
65
指定为 16 进制:
int intVal = Integer.parseInt("FF",16);
System.out.println(intVal);
255
Integer.valueOf()
valueOf()
和上述parseInt()
方法非常类似,唯一的区别就是返回值为包装类型 Integer
。其实,valueOf()
底层调用的是parseInt()
方法。
方法签名:
public static Integer valueOf(String s) throws NumberFormatException {...}
public static Integer valueOf(String s, int radix) throws NumberFormatException {...}
// 十进制
Integer intVal = Integer.valueOf("101");
System.out.println(intVal);
// 八进制
Integer intVal1 = Integer.valueOf("101", 8);
System.out.println(intVal1);
// 十六进制
Integer intVal2 = Integer.valueOf("AF", 16);
System.out.println(intVal2);
101
65
175
65
175
控制台显示的数据为十进制数。
Integer.decode()
decode()
方法可以用来将字符串转换为 int
,但仅仅适用于十进制、十六进制和八进制数据。
方法签名:
public static Integer decode(String nm) throws NumberFormatException
各类支持数值的说明:
- 八进制数字应以可选的正/负号开头,前缀 “0”,即 +0100,-02022、0334、0404等。
- 十进制数字应以可选的正负号开头,即 +100,-2022、334、404等。
- 十六进制数字应以可选的正负号开头,前缀 “0x” 或 “0X”,即 +0x100,-0x2022、0x334、0x404等。
// 十进制
Integer intVal = Integer.decode("+100");
System.out.println(intVal);
// 八进制
Integer intVal1 = Integer.decode("+0100");
System.out.println(intVal1);
// 十六进制
Integer intVal2 = Integer.decode("+0x100");
System.out.println(intVal2);
100
64
256
64
256
积极处理异常 NumberFormatException
字符串转换为 int 经常出现在面试题的笔试题部分,无论使用哪种转换方法,都需要积极处理异常 NumberFormatException
,避免程序出现如下错误。
Exception in thread "main" java.lang.NumberFormatException: For input string: "AF"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at com.mapull.example.section1.StringToInt.method3(StringToInt.java:23)
at com.mapull.example.section1.StringToInt.main(StringToInt.java:11)
完整的处理逻辑,应该类似下面这种写法:
public static void method9() {
String str = "100A";
int intVal = 0;
try {
intVal = Integer.parseInt(str);
} catch (NumberFormatException nfe) {
System.out.println("无法转换字符串:" + str);
}
System.out.println(intVal);
}
无法转换字符串:100A
0
0