Парсер реквестов

  • 8
  • Недоступна
Считайте с консоли URL-ссылку. Затем выведите на экран через пробел список всех параметров (Параметры идут после ? и разделяются &, например, lvl=15). URL содержит минимум 1 параметр. Если присутствует параметр obj, то передайте его значение в нужный метод alert.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (285)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Арина Мурашева16 уровень, Курган
вчера, 12:10
Программа должна вызывать метод alert с параметром double в случае, если значение параметра obj может быть корректно преобразовано в число типа double. Я написала функцию для вызова одного из алертов. Вот так не прошло:
public static void callAlert(String value) {
    if (value.contains(".")) {
        try {
            alert(Double.parseDouble(value));
        } catch (NumberFormatException e) {
            alert(value);
        }
    } else {
        alert(value);
    }
}
А вот так уже прошло:
public static void callAlert(String value) {
    try {
        double doubleValue = Double.parseDouble(value);
        alert(doubleValue);
    } catch (NumberFormatException e) {
        alert(value);
    }
}
Хотя оба варианта отрабатывают правильно.
Андрей31 уровень
воскресенье, 21:04
Решил с помощью try/catch для проверки String||double.Слышал, что вроде использовать ошибки для логики программы плохая практика. Может кто подскажет как можно сделать такую проверку? (Без поиска точки)
Никита Бабченко17 уровень, Москва
суббота, 12:29
Настоятельно рекомендую, элементарно, изучить String. В ней уже есть все необходимые методы, защищающие вас от лишней поломки головы. Юзаем только String и try/catch. Достаточно в отдельную строку выделить всё что после "?". Потом в массив параметров расплитить всё вокруг "&", затем циклом пройтись по массиву параметров=значения, и расплитить параметр вокруг "=" параллельно добавляя в ArrayList. Вывести лямбдой. Профит.
Александр23 уровень, Москва
20 июля, 19:18
Прочитал все комментарии. Для чего нам URL? Что он даст? Можно же использовать простую строку. К ней применять split. Что даст метод getQuery()? URL url = new URL(s); String query = url.getQuery();
LuneFox17 уровень, Москва
15 июля, 14:36
Решил с 1 попытки (не считая случайного мисклика по валидации сразу после принятия задачи). Solution занимает 29 строк, примерно час-полтора времени потратил. Основное время ушло на поиск работающей регулярки и объединения двух в одну. В итоге остановился на таком варианте для разбиения URL на кусочки типа "param=value":
originalURL.split("(^https?\\:\\/\\/.*?\\?)|\\&");
Человеческим языком: "Меня не интересует часть в начале строки после http:// или https:// и до первого попавшегося знака вопроса, а ещё порежьте, пожалуйста, оставшееся по знаку &" Только вот нулевой элемент массива всегда пустой после парсинга (приходится исключать его из вывода), не знаю, как этого избежать, не перебрасывая массив в список и не удаляя нулевой элемент.
Димка Данько19 уровень, Минск
16 июля, 08:52
У меня тоже ушло часа полтора. Поперся в дебри регулярок. Посмотрел как там работает, какие есть варианты :) сравнил эту регулярки с PHP :) и тут я наткнулся на класс работы с урлами :) называется URL :) реально клевая вещь. Посмотрите тоже, вот тут для начала аля вводная фича класса: http://qaru.site/questions/23560/parse-a-uri-string-into-name-value-collection
Руслан20 уровень, Усть-Орда
14 июля, 21:18
Решил, но не учел если в значениях параметра есть также всякие знаки, типа "=" , "?". их вроде экранируют? Ну да ладно.
LuneFox17 уровень, Москва
15 июля, 14:20
Просто делаешь ленивый алгоритм поиска совпадений, тогда всё остальное вместе с "=" и "?" можно запихнуть в значения.
Ольга18 уровень, Москва
8 июля, 18:38
боже. я чуть не чокнулась, но все-таки добила))). Очень хорошая задача на строки.
MartyMcAir18 уровень
7 июля, 10:32
Решил через 1 блок try with resourse, indexOf("?"), substring(..), contains("obj"), регулярки (javarush О регулярках 5 частей). Проверку прошло после того как вычитал в комментах ниже.. Что в catch должно быть RuntimeException, и проверка на то что в значении параметра obj= (до знака &) записано не нужно, а сразу это значение кидать в alert(..); (задачу кинул в закладки)
Artyom Popov19 уровень, Москва
3 июля, 07:13
74 строки кода, немного замороченно, но своими силами)
Mary19 уровень, Киев
30 мая, 15:55
Просто боль.