我有以下简单的代码,用于检测给定的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
。
感谢您的时间。
答案 0 :(得分:8)
尝试使用Long.parseLong(IPNumbers)
答案 1 :(得分:7)
为什么不使用正则表达式,或使用split(".")
?
除了需要仅由数字组成之外,还有其他限制。例如:
666.666.666.666
这将解析得很好,但是......不太可能是IP。
将其分解为部分可以让您确定(a)它有四个部分,以及(b)每个部分在IP地址的上下文中实际上是有意义的。
您还可以使用InetAddress
实施,或InetAddressValidator
from Apache Commons。
答案 2 :(得分:4)
对于非常大的整数,您可能需要使用BigInteger类(或 BigDecimal ),因为这些值可能超出了整数。
整数限制:
Minimum : -2147483648
Maximum : 2147483647
使用BigInteger:
string s = "239255255255";
BigInteger yourNumber = new BigInteger(s);
答案 3 :(得分:3)
239255255255太大而无法被整数持有。尝试使用BigInteger或BigDecimal。
答案 4 :(得分:3)
Integer
的范围是 -2,147,483,648 到 2,147,483,647 ,您上面提到的数字不包含在这些范围内,因此请使用{{1} },long
原始类型的范围介于 -9,223,372,036,854,775,808 和 9,223,372,036,854,775,807 之间。
因此,对于您的情况,最好使用long
函数将这么大的数字转换为Long.parseLong()
类型。
答案 5 :(得分:1)
整数的逻辑步长为long