4

我有以下简单的代码,旨在检测给定的 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.

感谢您的时间。

4

6 回答 6

10

尝试使用Long.parseLong(IPNumbers)

于 2011-12-07T21:31:29.300 回答
7

为什么不使用正则表达式,或者通过使用将其分解为组件split(".")

除了需要仅由数字组成之外,还有其他限制。例如:

666.666.666.666

这将解析得很好,但它是一个......不太可能的 IP。

将其分解为多个部分可以让您确定 (a) 它有四个部分,以及 (b) 每个部分在 IP 地址的上下文中实际上是有意义的。

你也可以使用一个InetAddress实现,或者InetAddressValidator来自 Apache Commons

于 2011-12-07T21:31:19.973 回答
5

对于非常大的整数,您可能需要使用BigInteger类(BigDecimal,因为这些值可能会超出 Integer 的限制。

整数限制:

Minimum : -2147483648
Maximum :  2147483647

使用大整数:

string s = "239255255255";
BigInteger yourNumber = new BigInteger(s);
于 2011-12-07T21:29:34.083 回答
3

239255255255 太大而不能被整数持有。尝试使用 BigInteger 或 BigDecimal。

于 2011-12-07T21:29:31.250 回答
3

an 的范围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类型。

于 2011-12-08T11:54:29.643 回答
1

从整数的逻辑步长是长的

于 2011-12-07T21:31:57.413 回答