【发布时间】:2014-06-17 07:49:58
【问题描述】:
编辑:澄清将任何有效的数字编码从字符串转换为数字
对于所有可接受的整数格式,尤其是在 Integer.parseInt 下抛出 NumberFormatException 的格式,如何将字符串转换为数字,例如整数。比如代码
...
int i = 0xff;
System.out.println(i);
String s = "0xff";
System.out.println( Integer.parseInt(s) );
....
将在第四行抛出 NumberFormatException,即使该字符串显然是十六进制整数的有效编码。我们可以假设我们已经知道编码是一个有效的数字,比如通过对照正则表达式检查它。最好也检查溢出(如 Integer.parseInt 所做的那样),但如果必须将其作为单独的步骤来完成,那就没问题了。
我可以遍历每个数字并手动计算合成,但这会非常困难。有没有更好的办法?
编辑:很多人都在用十六进制回答这个问题,这很好,但并不完全符合我的要求(这是我的错,我以十六进制为例)。我想知道是否有办法解码所有有效的java 编号。 Long.decode 绝对适合仅捕获十六进制,但在
上失败222222L
这是一个完全有效的long。我是否必须分别捕获每种不同的数字格式?我假设您已经使用正则表达式来判断它是什么类别的数字,即区分浮点数、整数等。
【问题讨论】:
-
如果你放弃
0x,你可以打电话给Integer.parseInt(s, 16)。 -
@dg123 这对十六进制有帮助,但一般不能解决问题——例如,不能捕获 111_111_111 或 1111111L。
-
@Blorgbeard 这也不是一个通用的解决方案。我当然可以手动检查所有情况,尽管这看起来确实是检查十六进制数字的好方法
-
不要将数字与数字文字混淆。后者只是语法糖。