学会将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类型。我们还学会了如何解析十进制、八进制和十六进制格式的数字。