将 Java 字符串String转换为 int
学会将Java String转换为int值。请注意,字符串可以包含普通的十进制值或其他进制或基数的不同值。
1.使用Integer.parseInt()
1.1. 语法
Integer.parseInt()方法将字符串解析为带符号的整数值。该方法是一个重载方法,具有以下参数:
- string:要解析的字符串。
- radix:解析时要使用的基数。
- beginIndex:开始索引(包括在内)。
- endIndex:结束索引(不包括在内)。
public static int parseInt(string) throws NumberFormatException { ... } public static int parseInt(string, int radix) throws NumberFormatException { ... } parseInt(string, int beginIndex, int endIndex, int radix) throws NumberFormatException { ... }
1.2. 示例
在以下Java程序中,我们使用上述三种方法解析字符串“1001”并验证输出结果。
Assertions.assertEquals(1001, Integer.parseInt("1001")); Assertions.assertEquals(513, Integer.parseInt("1001", 8)); Assertions.assertEquals(1001, Integer.parseInt("amount=1001", 7, 11, 10));
1.3. 抛出NumberFormatException异常
如果以下情况发生,这三种方法都会抛出NumberFormatException异常:
- 参数字符串为null。
- 参数字符串长度为零,即空字符串。
- 参数字符串在指定的基数中无法解析为整数。默认基数为10。
Assertions.assertThrows(NumberFormatException.class, ()->{ Integer.parseInt(null); }); Assertions.assertThrows(NumberFormatException.class, ()->{ Integer.parseInt("abc"); });
2.使用Integer.valueOf()
Integer.valueOf()与parseInt()方法非常相似,唯一的区别是返回类型是Integer类型,而不是原始的int类型。实际上,如果我们查看valueOf()方法的源代码,它在内部调用了parseInt()方法。
它也有两种重载形式。请注意方法的返回类型是Integer。
public static Integer valueOf(String s) throws NumberFormatException {...} public static Integer valueOf(String s, int radix) throws NumberFormatException {...}
这两种方法在所有情况下都会抛出NumberFormatException异常,与parseInt()类似。
Assertions.assertEquals(1001, Integer.valueOf("1001")); Assertions.assertEquals(513, Integer.valueOf("1001", 8)); Assertions.assertThrows(NumberFormatException.class, ()->{ Integer.valueOf("abc"); });
3.使用Integer.decode()
Integer.decode()是另一种用于将字符串转换为整数的有用方法,但仅适用于十进制、十六进制和八进制数字。请注意以下几点:
- 十进制数字可以以可选的正/负号开头,例如+100、-2022、334、404。
- 八进制数字可以以可选的正/负号开头,然后是后缀‘0’(零)。例如,+0100、-02022、0334、0404。
- 十六进制数字可以以可选的正/负号开头,然后是后缀‘0x’或‘0X’(零和大写X)。例如,+0x100、-0x2022、0x334、0x404。
public static Integer decode(String s) throws NumberFormatException
让我们看一个示例来更好地理解它。
Assertions.assertEquals(100, Integer.decode("+100")); Assertions.assertEquals(64, Integer.decode("+0100")); Assertions.assertEquals(256, Integer.decode("+0x100"));
4.结论
在这个快速的Java教程中,我们学习了如何将字符串转换为int或Integer类型。我们还学会了如何解析十进制、八进制和十六进制格式的数字。