Java Integer.parseInt()不适用于大数字

时间:2011-12-07 21:27:53

标签: java class integer static-methods parseint

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

感谢您的时间。

6 个答案:

答案 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