繁体   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