3

所以我在读这个:

10011011001;0110,1001,1001,0,10,11

并在其上运行此代码:

        String[] parts = line.split(";");
        System.out.println("Part 1 = " + parts[0]);
        System.out.println("Part 2 = " + parts[1]);
        System.out.println(isNumeric(parts[0]));
        int original = Integer.parseInt(parts[0]);
        System.out.println("Original = " + original);

isNumeric方法是我为调试而编写的。

public static boolean isNumeric(String str) {
    for (char c : str.toCharArray()) {
        if (!Character.isDigit(c)) {
            return false;
        }
    }
    return true;
}

输出:

Line = 10011011001;0110,1001,1001,0,10,11
Part 1 = 10011011001
Part 2 = 0110,1001,1001,0,10,11
true
Exception in thread "main" java.lang.NumberFormatException: For input string: "10011011001"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at str_substitution.main(str_substitution.java:45)

不知道为什么会出现这个异常,显然字符串是数字的,并且有效。

4

3 回答 3

7

10,011,011,001 太大而无法放入 32 位整数。

也许您的意思是使用longand parseLong()

或者您是否真的打算将其解析为二进制数(十进制 1241)parseInt(parts[0], 2)

您可以在此处检查每种 Java 数据类型的最小值和最大值

于 2013-02-25T02:52:16.620 回答
3

你的数字是 100 亿,而 Java 的整数最大值大约是 -2b - 2b。因此它是不可解析的。

也许您想用parseInt(String s,int radix)二进制数来读取它?或parseLong()

来自 Javadoc(类似案例的示例)-

parseInt("2147483648", 10) throws a NumberFormatException
于 2013-02-25T02:52:35.480 回答
0

也许你想使用Long.parseLong()而不是Integer.parseInt()

于 2013-02-25T02:57:07.747 回答