[英]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.