【发布时间】:2016-08-16 13:02:50
【问题描述】:
我正在学习 JAVA,最近在一些训练任务中遇到了同样的问题。
我有一些数字,其中一些以 0 开头。我发现这些数字是八进制的,这意味着它不是我想要的数字,或者它给了我一个错误(因为“8”或“9”,因为它们不是八进制数字)在我将其读取为 int 或 long ...
到目前为止,我只需要使用两位数,例如 14 或 05。 我将它们视为字符串并使用检查所有字符串数字并将它们转换为这样的数字的函数将它们转换为数字
String numStr = "02";
if(numStr.startsWith("0")) {
int num = getNumericValue(numStr.charAt(1));
} else {
int num = Integer.parseInt(numStr);
}
现在我有很多未知数的数字(所以可能超过 2 个)。我知道,如果我愿意,我可以使用循环和.substring(),但必须有更简单的方法。
有什么办法可以简单地忽略零?
编辑:
直到现在,我总是将必须处理的数字编辑为字符串,因为我找不到更简单的方法来解决问题。当我有 0010 27 09 时,我必须声明它为:String[] numbers = {"0010", "27", "09"};
因为如果我这样声明:int[] numbers = {0010, 27, 09};
numbers[0] 将是 8 而不是 10, numbers[2] 会给我一个错误
实际上我不想使用字符串。我真正想要的是读取以零开头的数字作为数字(例如:int 或 long),但我希望它们是十进制的。问题是我有很多来源。我将它们复制到代码中并将其编辑为数组的声明。但我不想将它们编辑为字符串,只是为了删除零并再次使它们成为数字。
【问题讨论】:
-
"numStr".charAt(1)是'u'。而Integer.parseInt("numStr")将失败并返回NumberFormatException,因为"numStr"不是数字。 -
您能否发布预期/示例输入和输出?
-
可能跑题了,但是你在双引号中使用了你的字符串变量。它应该只是 numStr 而不是“numStr”。在解析和获取字符时。
-
Integer.parseInt("010")将返回一个int,其值为10。除非您明确指定基数,否则十进制是您的String将被解析的默认系统。 -
Java 仅将数字视为以 0 开头的八进制数,而实际上它们与源代码中的数字相同。 Java 确实不将用户输入您的程序(例如,通过程序的 GUI)的数字视为八进制,因此在这种情况下您不需要做任何技巧。
Integer.parseInt(...)不将 0 开头的数字视为八进制!