Java Integer.parseInt()が大きな数に対して機能しない

2011年12月08日に質問されました。  ·  閲覧回数 15.1k回  ·  ソース

Oliver Spryn picture
2011年12月08日

次の簡単なコードは、特定のIPv4アドレスが実際に数値しか持っていないことを検出することを目的としています(つまり、ドットが削除された後)。

import edu.gcc.processing.exceptions.net.IPAddressNumericException;

//Get the IP address
  String address = "239.255.255.255";

//Check to see if this is a number      
  try {
    String IPNumbers = address.replace(".", "");
    Integer.parseInt(IPNumbers);            
  } catch (NumberFormatException e) {
    System.out.print(e.getMessage());
  }

何らかの理由で、 NumberFormatExceptionが発生し、次のエラーが発生します。

For input string: "239255255255"

誰かが私がこれを理解するのを手伝ってくれませんか? parseInt()メソッドは、 127001などの小さい数値で機能します。

お時間をいただきありがとうございます。

回答

PTBG picture
2011年12月08日
9

Long.parseLong(IPNumbers)を使用してみてください

Dave Newton picture
2011年12月08日
7

正規表現を使用したり、 split(".")使用して正規表現をコンポーネントに分解したりしてみませんか?

数字だけで構成する必要がある以外にも、他の制限があります。 例えば:

666.666.666.666

これは問題なく解析されますが、IPの可能性は低いです。

それをその部分に分割すると、(a)4つの部分があること、および(b)各部分がIPアドレスのコンテキストで実際に意味があることを判断できます。

InetAddress実装、またはApache CommonsのInetAddressValidator使用することもできます。

Rion Williams picture
2011年12月08日
5

非常に大きな整数の場合、値がIntegerの制限を超える可能性があるため、 BigIntegerクラス(またはBigDecimalを使用することをお勧めします。

整数制限:

Minimum : -2147483648
Maximum :  2147483647

BigIntegerの使用:

string s = "239255255255";
BigInteger yourNumber = new BigInteger(s);
BenCole picture
2011年12月08日
3

239255255255は大きすぎて、整数で保持できません。 BigIntegerまたはBigDecimalを使用してみてください。

Jimshad Abdulla picture
2011年12月08日
3

Integer-2,147,483,648から2,147,483,647であり、上記の数値はこれらの範囲に含まれないため、 longを使用します。 longプリミティブ型の範囲は次のとおりです。 -9,223,372,036,854,775,808から9,223,372,036,854,775,807の間。

したがって、あなたの場合は、 Long.parseLong()関数を使用して、このような大きな数値をlong型に変換することをお勧めします。

Ash Burlaczenko picture
2011年12月08日
1

整数からの論理的なステップアップは長いです