Java Integer.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.

Спасибо за уделенное время.


person Oliver Spryn    schedule 07.12.2011    source источник
comment
Ну а какой диапазон целого числа? (И почему я мог задать этот вопрос? :-)   -  person    schedule 08.12.2011
comment
Возможно, вы захотите изучить использование регулярного выражения stackoverflow.com/questions/46146/   -  person Andrew T Finnell    schedule 08.12.2011


Ответы (6)


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

person PTBG    schedule 07.12.2011
comment
Это именно то, что мне было нужно. Спасибо! - person Oliver Spryn; 08.12.2011

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

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

666.666.666.666

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

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

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

person Dave Newton    schedule 07.12.2011
comment
Тоже - очень неудачный :) - person Rion Williams; 08.12.2011
comment
+1 за то, что на самом деле предположил, что подход простой проверки того, является ли это число недостаточным, и что переключение на длинное не решит эту проблему - person Robin; 08.12.2011

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

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

Minimum : -2147483648
Maximum :  2147483647

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

string s = "239255255255";
BigInteger yourNumber = new BigInteger(s);
person Rion Williams    schedule 07.12.2011
comment
хм ... Какой метод я могу использовать для преобразования строки в целое число? - person Oliver Spryn; 08.12.2011
comment
Существует также класс BigDecimal, если он вам нужен, я добавлю необходимую документацию в редакцию. - person Rion Williams; 08.12.2011
comment
239255255255 не является целым числом. См. docs.oracle.com/javase/6. / docs / api / java / lang / - person Steve Kuo; 08.12.2011
comment
@ spryno724, целое число не сможет вместить такое большое значение, вам придется использовать BigInteger для его сохранения. - person Rion Williams; 08.12.2011

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

person BenCole    schedule 07.12.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.

person Jimshad Abdulla    schedule 08.12.2011

Логический шаг вверх от целого числа - это long < / а>

person Ash Burlaczenko    schedule 07.12.2011