Java字符串转换为int – String to int


在 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);

可以通过第二个参数指定为 8 进制:

int intVal = Integer.parseInt("101",8);
System.out.println(intVal);

指定为 16 进制:

int intVal = Integer.parseInt("FF",16);
System.out.println(intVal);

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);

控制台显示的数据为十进制数。

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);

积极处理异常 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);
    }

标签: