По заданной строке выясните, удовлетворяет ли она правилам именования адресов IPv4 (проверка кода), не ища другого решения.
IP-адрес - это цифровая метка, назначаемая каждому устройству (например, компьютеру, принтеру), участвующему в компьютерной сети, которая использует для связи Интернет-протокол. Существует две версии интернет-протокола и, следовательно, две версии адресов. Одним из них является адрес IPv4.
Адреса IPv4 представлены в десятичной системе счисления, которая состоит из четырех десятичных чисел, каждое из которых находится в диапазоне от 0 до 255 включительно, разделенных точками, например 172.16.254.1.
Для inputString = "172.16.254.1" вывод должен быть isIPv4Address(inputString) = true;
Для inputString = "172.316.254.1" вывод должен быть isIPv4Address(inputString) = false
Вот мое решение:
boolean isIPv4Address(String inputString) {
String splitparts[] = inputString.split("[.]");
if(splitparts.length != 4){
return false;
}
for(String part : splitparts){
if(part.isEmpty())
return false;
if(!part.matches("[0,9]{1,3}"))
return false;
if(!(Integer.parseInt(part)>=0 && Integer.parseInt(part)<=255))
return false;
}
return true;
}
Мое решение возвращает ложное во всех случаях, и я не могу выяснить причину ошибки. Было бы здорово, если бы кто-то просмотрел мой код и объяснил мне, почему он возвращает только ложь.
1 ответ
Ваша проблема заключается в [0,9]{1,3}. Внутри блока [] вы должны использовать -, чтобы указать диапазон. Это должно быть [0-9]{1,3}. Он искал в строке от 1 до 3 символов в строке, которые были либо "0", буквальная строка ",", либо "9". Если вы хотите, чтобы он принимал только строки длиной от 1 до 3 символов, вы можете сделать:
^[0-9]{1,3}$
^ обозначает начало, а $ конец.