簡體   English   中英

Java Integer.parseInt()不適用於大數字

[英]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());
  }

由於某種原因, NumberFormatExceptionNumberFormatException ,我收到此錯誤:

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,6482,147,483,647 ,你上面提到的數字不包括在這些范圍內,所以使用longlong基本類型的范圍在-9,223,372,036,854,775,8089,223,372,036,854,775,807之間。

因此,對於您的情況,最好使用Long.parseLong()函數將如此大的數字轉換為long類型。

從整數開始的邏輯步長很長

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM