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

  • 8
  • Недоступна
Считайте с консоли URL-ссылку. Затем выведите на экран через пробел список всех параметров (Параметры идут после ? и разделяются &, например, lvl=15). URL содержит минимум 1 параметр. Если присутствует параметр obj, то передайте его значение в нужный метод alert.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (204)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Александр16 уровень, Казань
позавчера, 08:29
Первая задача, которая в тупик поставила - кучу подходов попробовал - 2 дня решал. В итоге с комментами, интернетом пришел к такому решению: 1) Получаем у строки через url.getQuery хвост 2) Сплитим его по "&" 3) Далее в парах ищем "=" и загоняем в Map через substring, получается у нас все будет по порядку.
Map<Integer, String[]> // В Int номер пары; в массиве строк Param и Value
4) Через первый цикл выводим нулевые элементы:
System.out.print(map.get(i)[0] + " ");
5) Вторым проверяем obj и
String[] currentElem = map.get(i);
currentElem[0].equals("obj")
6) через try
alert(Double.parseDouble(currentElem[1]));
через catch
alert(currentElem[1]);
Антон16 уровень, Москва
среда, 12:50
пипец сделал с первой попытки)), но написал свой парсер (юзал substring,indexof,LinkedHashMap), а тут люди в одну строчку решают. Вот и думаю может гуглить сперва теперь, прежде чем свой велосипед изобретать...
Sergey22 уровень, Москва
11 февраля, 12:27
Коллеги, подскажите, что программа должна в итоге вывести? Из условия совершенно ничего не понятно...... для строки ввода "http://javarush.ru/alpha/index.html?obj=3.14&name=Amigo"; вывожу double: 3.14 для "http://javarush.ru/alpha/index.html?lvl=15&view&name=Amigo" String: Amigo не проходит валидацию.....
Vadim17 уровень, Москва
13 февраля, 21:04
Нужно вывести символы от "?" до "=" либо до "&" (зависит от того, что раньше встретил). Затем пробел. Затем от "&" до "=" либо до "&"(зависит от того, что раньше встретил) и т. д. до конца строки. Если в строке присутствует "obj", выводишь то что идет после "obj=" и до следующего "&". для строки ввода "http://javarush.ru/alpha/index.html?obj=3.14&name=Amigo": obj name double: 3.14 для "http://javarush.ru/alpha/index.html?lvl=15&view&name=Amigo": lvl view name
Dmytro Zhelezniak20 уровень, Харьков
3 февраля, 19:11
Выводит все правильно , но не проходит по двум последним пунктам. В чем может быть причина?
Игорь16 уровень
3 февраля, 22:18
У меня прошло. Я сделал через try-catch. В блоке try пропарсил строку как Double, а в случае ошибки, в catch вывел как строку.
Dmytro Zhelezniak20 уровень, Харьков
4 февраля, 12:28
Нашел причину. В условии написано "дробные числа разделяются точкой". Думал, что важно делать проверку на наличие "." в значении. Убрал эту проверку и условия выполнились.
S3R3N1TY22 уровень, Санкт-Петербург
21 января, 22:13
Решил через
String s = reader.readLine();
URL url = new URL(s);

String query = url.getQuery();
String[] pairs = query.split("&");
Дальше по массиву находим индекс для знака равно. И от него отталкиваемся, чтобы парсить строки через substring (название параметра до знака равно, значение после знака равно)
for (String pair : pairs) {
           int idx = pair.indexOf("=");
Заодно проверяется введен ли действительно url,если в начале не будет http (протокола) то выкинет исключение. Дальше в цикле занес ключ и значение в мапу. Если значения нету - то занес null. Затем вывод на экран и проверка условия для метода alert.
Вадим22 уровень, Новосибирск
9 января, 16:38
Задача вроде не сложная, если разобраться с парсом сторк, но вот условие задачи понял не правильно. Думал что валидатор гонит и не принимает решение) В следующий раз буду еще внимательней при ознакомлении с условием)
Rif17 уровень
6 января, 01:14
Игорь22 уровень, Нижний Новгород
22 декабря 2018, 22:26
Задачу надо было назвать "split рулит!" А алгоритм простой: 1. split по символу '?' 2. второй аргумент массива (строка с параметрами) -> split по символу '&' 3. foreach каждый элемент нового массива и split по символу '=' 4. foreach (итоговый массив) и все [0] элементы -> в ArrayList (это набор параметров) 5. причем если в п.4 "obj", то [1] элемент массива в другой ArraList Весь код парсинга (без объявления переменных - 7 строк). Ну и потом еще 14 строк вывода)) P.S. Не пойму почему ниже в комментариях многие ругаются на формат вывода. Я просто вызывал метод alert. Но, возможно, авторы что-то подправили уже.
Kirill Brykin20 уровень, Москва
27 декабря 2018, 15:45
А зачем нужен ( ^ ) ? Разве так не верно будет : replaceAll("(.*\\?)","")
Rif17 уровень
6 января, 01:11
Быстрее будет получить массив строк запроса
String[] pairs = url.getQuery().split("&");
и дальше ловить имена и значения параметров. Только лучше использовать HashMap для итогового списка.
jondo35 уровень
20 декабря 2018, 14:31
решила с 44 попытки кааарл -_-
Анатолий24 уровень, Москва
15 декабря 2018, 07:48
Потратил 8 попыток, чтобы найти отсутствие двоеточия в alert-е... Не уверен, что это тайный секрет в задаче, скорее, недочет?