'parseInt(String, radix)'是如何工作的?



我知道parseInt方法用于将字符串转换为int,但我不知道如何。我明白,如果你说:

System.out.println(Integer.parseInt("52", 10));

会给你 52 以 10 为基数。我不知道的是,如果你说用 15 替换基数 10,它是如何计算的。从一些研究中,我发现有人说你必须使用ASCII值。如果有帮助,我正在尝试能够在纸上单独解决这个问题,而无需更多代码的工作。

你是对的,数字表示基数。你说的不对

Integer.parseInt("52", 10) 会给你 52 以 10 为基数。

这实际上会解析数字 52,就好像它在 10 的基数中一样。 据我们所知,52 可能是基数 6。

例如:

Integer.parseInt("101", 2);

是说解析二进制(基数 2(数字一零一。它并不是说将一百零一解析为二进制。这将返回以 10 为基数的数字 5。

返回的任何数字都是标准整数,如果您尝试打印,它将以 10 为基数。


值得注意的是,如果您尝试解析一个在该基数中可能存在的数字,例如:

Integer.parseInt("599", 2);

然后你会得到一个例外。

您正在解析的字符串可能位于您提供的特定基数中,以解析为 int。 int 是一个数值,本身没有特定的基数。

例子

Integer.parseInt("52", 10) returns 52
Integer.parseInt("52", 8) returns the numerical value 42 (8*5+2)
Integer.parseInt("A2", 16) returns the base 10 value 162

parseInt(String s, int radix)方法的工作方式如下:

  1. 选中radix参数。它应该在范围 2 - 36
  2. 字符串的每个字符都经过解析并验证为有效数字(在基数定义的范围内(
  3. 结果乘以radix并增量添加到结果变量中
  4. 返回结果变量

算法非常简单。工作的一个重要部分是由验证数字是否有效的部分完成的。

围绕这段代码,有一些检查最终会导致NumberFormatException,例如在数字之前存在有效符号(+-(,存在前导零,溢出等。

最新更新