Java Integer.parseInt () не работает для больших чисел - PullRequest
2 голосов
/ 08 декабря 2011

У меня есть следующий простой фрагмент кода, который предназначен для обнаружения того, что данный 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 ]

8 голосов
/ 08 декабря 2011

попробуйте использовать Long.parseLong(IPNumbers)

7 голосов
/ 08 декабря 2011

Почему бы не использовать регулярное выражение или разбить его на составляющие с помощью split(".")?

Существуют и другие ограничения, помимо необходимости состоять только из цифр.Например:

666.666.666.666

Это будет хорошо разбираться, но это ... маловероятный IP-адрес.

Разбиение его на части позволяет определить (а), что оно состоит из четырех частейи (b) что каждая часть действительно имеет смысл в контексте IP-адреса.

Вы также можете использовать реализацию InetAddress или InetAddressValidator от Apache Commons .

4 голосов
/ 08 декабря 2011

Для очень больших целых чисел вы можете использовать класс BigInteger ( или BigDecimal ) , так как значения могут превышать пределы Integer.

Целочисленные ограничения:

Minimum : -2147483648
Maximum :  2147483647

Использование BigInteger:

string s = "239255255255";
BigInteger yourNumber = new BigInteger(s);
3 голосов
/ 08 декабря 2011

Диапазон значений 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 тип.

3 голосов
/ 08 декабря 2011

239255255255 слишком велик, чтобы удерживать его целым числом. Попробуйте использовать BigInteger или BigDecimal.

1 голос
/ 08 декабря 2011

Логический шаг вверх от целого числа: long

...