1

電話番号「5554567899」を解析しようとすると、次のエラーが発生します

java.lang.NumberFormatException: For input string: "5554567899"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:495)
at java.lang.Integer.parseInt(Integer.java:527)
...

明らかに、電話番号は解析することができます。私もこの質問を参照しました、そしてバイトコードの結果は

53,53,53,52,53,54,55,56,57,57,

したがって、文字列には非表示の文字はありません。私は困惑しています、誰か助けてもらえますか?

参考までに、エラーをスローしているコードのセクションは次のとおりです。

String fullNumber = null;
        for(Phone phone : party.getPhones()) {
            if(phone != null && !phone.getDialNumber().isEmpty()) {
                if(!phone.getAreaCode().isEmpty()) {
                    fullNumber = phone.getAreaCode();
                }
                fullNumber += phone.getDialNumber();
                if(phone1 == null || phone1.equals(0)) {
                    LOGGER.debug(displayCharValues(fullNumber));
                    phone1 = Integer.parseInt(fullNumber);
                }
         }

phone1Java.lang.Integerタイプです。

4

4 に答える 4

7

値がintの範囲を超えています。それを長い変数に解析します。

簡単なテスト:

int i = 5554567899;

コンパイル時エラーです:「int型のリテラル5554567899は範囲外です」

于 2012-07-31T22:14:11.067 に答える
2

実際、電話番号は数字として扱われるべきではありませんが、国番号、市外局番、交換局などを分割して、文字列または場合によっては自分で定義したデータ型として扱われるべきです。

数字のみ、または数字と標準の電話番号区切り文字の一部が含まれていることを検証したい場合は、正規表現で行うことができます。

これを電話番号と呼び、数値の文字列ですが、数値計算での使用ではないため、決して数値として扱わない方がよいでしょう。

「社会保障番号」も同様です。

于 2012-07-31T22:22:06.577 に答える
1

数値が大きすぎて整数に収まらないため、5554567899。Long.parseLong代わりに試してください。

于 2012-07-31T22:14:12.487 に答える
1

5554567899Integer.MAX_VALUE(2147483647)を超えています。Longまたは代わりBigIntegerに:

BigInteger bigNumber = new BigInteger("5554567899");
于 2012-07-31T22:15:21.767 に答える