По заданной строке выясните, удовлетворяет ли она правилам именования адресов 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}$

^ обозначает начало, а $ конец.

Другие вопросы по тегам