Java String to int 字符串转换为整数

Java 字符串转整数主要涉及两个方法:parseInt() 与 parseLong()。

String to int

有多种方式可以将字符串转换为 int 或 Integer 。

构造器

Integer 的构造器支持传入一个字符串:

Integer v1 = new Integer("010");
System.out.println(v1);
10
执行结果

实际上,在内部它是通过 Integer.parseInt() 方法来实现的。

Integer.parseInt() 方法

parseInt() 方法以两种形式重载:

  • public static int parseInt(String s) throw NumberFormatException {…}
  • public static int parseInt(String s, int radix) throw NumberFormatException {…}

参数字符串是null或字符串长度为零,即空字符串,这两种方法都抛出NumberFormatException。

当字符串不是10为基数的可解析整数时,第一种方法也会引发异常。

radix 表示进制,常见的进制如 二进制、八进制、十进制、十六进制等。

public static void main(String[] args) {
    int v1 = Integer.parseInt("111");
    System.out.println(v1);

    int v2 = Integer.parseInt("010");
    System.out.println(v2);

    int v3 = Integer.parseInt("");
}
111
10
Exception in thread “main” java.lang.NumberFormatException: For input string: “”
执行结果
public static void main(String[] args) {
    int v1 = Integer.parseInt("110");
    System.out.println(v1);

    int v2 = Integer.parseInt("110",8);
    System.out.println(v2);

    int v3 = Integer.parseInt("110",16);
    System.out.println(v3);
}
110
72
272
执行结果

Integer.valueOf() 方法

valueOf() 方法与 parseInt()方法非常相似,只有一个区别是返回类型是Integer而不是 int。实际上,如果你查看valueOf()方法的源代码,会发现它会在内部调用parseInt()方法。

valueOf()也以两种形式重载:

public static Integer valueOf(String s) throws NumberFormatException {...}
public static Integer valueOf(String s, int radix) throws NumberFormatException {...}

利用valueOf()将字符串转换为 Integer:

public static void main(String[] args) {
    Integer v1 = Integer.valueOf("1230");
    System.out.println(v1);

    Integer v2 = Integer.valueOf("0120");
    System.out.println(v2);

    Integer v3 = Integer.valueOf("");
}
1230
120
Exception in thread “main” java.lang.NumberFormatException: For input string: “”
执行结果

Integer.decode() 方法

decode()也可以将字符串转换为 int ,它适用于十进制、十六进制和八进制数。

  • 八进制数应以可选的加号/减号开头,然后是“0”,即 +0100、-02022、0334、0404 等。
  • 十进制数字应以可选的加号/减号开头,即 +100、-2022、334、404 等。
  • 十六进制数字应以可选的加号/减号开头,然后是“0x”或“0X”,即 +0x100、-0x2022、0x334、0x404 等。

decode()方法定义:

public static Integer decode(String nm) throws NumberFormatException

decode()支持常见的三种进制数,在内部,它调用 valueOf() 将字符串转换为对应的整数形式。

public static void main(String[] args) {
    // 十进制
    Integer v1 = Integer.decode("1230");
    System.out.println(v1);
    // 八进制
    Integer v2 = Integer.decode("+0110");
    System.out.println(v2);
    // 十六进制
    Integer v3 = Integer.decode("+0x110");
    System.out.println(v3);
}
1230
72
272
执行结果

String to long

与字符串转 int 类似,字符串转为 long 也有多种形式:

构造函数

Long v1 = new Long("+11");

实际上,在内部他是通过 parseLong(String)来实现的。

Long.parseLong(String) 静态方法

parseLong有两个重载形式:

public static long parseLong(String s) throws NumberFormatException
public static long parseLong(String s, int radix) throws NumberFormatException

参数字符串是null或字符串长度为零,即空字符串,这两种方法都抛出NumberFormatException。

当字符串不是10为基数的可解析整数时,第一种方法也会引发异常。

radix 表示进制,常见的进制如 二进制、八进制、十进制、十六进制等。

public static void main(String[] args) {
    long v1 = Long.parseLong("029");
    System.out.println(v1);

    long v2 = Long.parseLong("+333");
    System.out.println(v2);

    long v3 = Long.parseLong("-020");
    System.out.println(v3);
}

Long.valueOf(String) 静态方法

  • Long.valueOf(String)方法将string参数解析为有符号十进制长整型。
  • 字符串中的字符必须都是十进制数字,除了第一个字符可以是负数的减号 (-)和正数的加号 (+)号。

parseLong想必,该方法仅仅返回值是 Long。在内部,valueOf() 是通过parseLong来实现的。

将正数转换为 long,前面的 + 会省略,负数会保留-

public static void main(String[] args) {
    Long v1 = Long.valueOf("012");
    System.out.println(v1);

    Long v2 = Long.valueOf("+120");
    System.out.println(v2);

    Long v3 = Long.valueOf("-99");
    System.out.println(v3);
}
12
120
-99
执行结果

parseUnsignedLong 无符号

除了我们常见的整数,还有一个一种 UnsignedLong,被称之为无符号长整形

Long 的范围是[-2^63,2^63-1],UnsignedLong 的范围是[0,2^64-1],它不能表示负数。

public static void main(String[] args) {
    long v1 = Long.parseUnsignedLong("+100");
    System.out.println(v1);

    long v2 = Long.parseUnsignedLong("-100"); //java.lang.NumberFormatException
}

将负数进行解析,会抛出NumberFormatException。

关于 NumberFormatException

字符串转换为整数,必须要入参字符串是标准的数值,否则容易抛出NumberFormatException。因此,实际开发中,应该将代码保留在 try-catch 块中,以避免应用程序中出现任何奇怪的行为。

你可能会直接用下面的代码来转换字符串为整数:

int intVal = Integer.parseInt("a123");//java.lang.NumberFormatException
System.out.println(intVal);

确保解析的动作能被合理处理:

public static void main(String[] args) {
    try {
        int intVal = Integer.parseInt("a123");//java.lang.NumberFormatException
        System.out.println(intVal);
    }catch (NumberFormatException e){
        System.out.println("字符串解析失败 " + e.getMessage());
    }
}
字符串解析失败 For input string: “a123”
执行结果
标签: