[英]Java Integer.parseInt() Not Working for Large Numbers
我有以下簡單的代碼片段,用於檢測給定的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
了NumberFormatException
,我收到此錯誤:
For input string: "239255255255"
有人可以幫我理解這個嗎? parseInt()
方法適用於較小的數字,例如127001
。
感謝您的時間。
嘗試使用Long.parseLong(IPNumbers)
為什么不使用正則表達式,或使用split(".")
將其分解為其組件?
除了需要僅由數字組成之外,還有其他限制。 例如:
666.666.666.666
這將解析得很好,但是......不太可能是IP。
將其分解為部分可以讓您確定(a)它有四個部分,以及(b)每個部分在IP地址的上下文中實際上是有意義的。
您還可以使用Apache Commons中的InetAddress
實現或InetAddressValidator
。
對於非常大的整數,您可能希望使用BigInteger類( 或BigDecimal ) ,因為值可能超過Integer的限制。
整數限制:
Minimum : -2147483648
Maximum : 2147483647
使用BigInteger:
string s = "239255255255";
BigInteger yourNumber = new BigInteger(s);
239255255255太大了,無法被整數持有。 嘗試使用BigInteger或BigDecimal。
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
類型。
從整數開始的邏輯步長很長
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.