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 ビット整数に収まりません。

おそらく、longとを使用するつもりparseLong()ですか?

それとも、実際には 2 進数 (10 進数の 1241) として解析するつもりでしたparseInt(parts[0], 2)か?

ここでは、各 Java データ型の最小値と最大値を確認できます。

于 2013-02-25T02:52:16.620 に答える
3

あなたの数は 100 億ですが、Java の整数の最大値はおよそ -2b - 2b です。したがって、解析不能です。

parseInt(String s,int radix)おそらく、それを 2 進数として読み込むために使用したいですか? または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 に答える