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

  • 16
  • Недоступна
Считайте с консоли URL-ссылку. Затем выведите на экран через пробел список всех параметров (Параметры идут после ? и разделяются &, например, lvl=15). URL содержит минимум 1 параметр. Если присутствует параметр obj, то передайте его значение в нужный метод alert.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (560)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Ярик Цимбал16 уровень, Киев
2 часа назад
Пришло время разобраться с работой дебагера)
SCMan18 уровень, Санкт-Петербург
вчера, 08:21
Если кому интересно, костыльное решение через перебор символов.
public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String url = reader.readLine();
        ArrayList <String> parameters = new ArrayList<>();
        boolean flag = false;
        for (int i = 0; i < url.length(); i++) {
            if (url.charAt(i) == '?' || url.charAt(i) == '&') {
                flag = true;
                continue;
            }
            if (flag) {
                String parameter = "";
                for (int j = i; j < url.length(); j++) {
                    if (url.charAt(j)!='='&&url.charAt(j)!='&') parameter += url.charAt(j);
                    else {
                        parameters.add(parameter);
                        flag = false;
                        break;
                    }
                }
            }
        }
        for (String par : parameters) {
            System.out.print(par + " ");
        }
        System.out.println();
        if (url.contains("obj=")) {
            String objValue = url.substring(url.indexOf("obj=")+4);
            if (objValue.contains("&")) objValue = objValue.substring(0,objValue.indexOf("&"));
            try {
                alert (Double.parseDouble(objValue));
            }
            catch (NumberFormatException e) {
                alert (objValue);
            }
        }
    }
    public static void alert(double value) {
        System.out.println("double: " + value);
    }
    public static void alert(String value) {
        System.out.println("String: " + value);
    }
}
Не вспомнил про метод split поэтому решил так, потом только посмотрел комментарии.
Fors Major22 уровень, Кишинев
31 июля, 19:11
-Решил с двух, попыток, решил с трех. Кто вы люди? я задачи сдаю , хорошо если с 10 раз, что там валидатор хочет вообще темный лес. А вот пробел в конце нужен? а новую строку? А InputStream создал напрямую или в 2 приёма, (чтобы сохранить код понятным для себя самого)? Тут можно решить за 1 попытку или раз в 20 задач или если копипастить чужой код или если вы прогер от бога\со стажем. Скажите мне, а метод
public static void alert(String value) {
    System.out.println("String: " + value);
}
разве не выполняет перенос строки? и итоговый результат с параметром obj - 3 строки, а не две, как в условии? =======Вы решили задачу лучше, чем 0% учеников. Вам удалось ее решить с 26 попытки.
Sasha Motorin16 уровень, Кострома
воскресенье, 19:35
дак ты попробуй требования к задаче внимательней читать, да проверять результат до отправки на валидатор😇
понедельник, 10:00
программы же можно запускать перед тем как жмякать зеленую галочку, а если нечего запускать, то почти всегда можно пару принтов добавить и поглядеть что выходит)
Fors Major22 уровень, Кишинев
понедельник, 10:48
я в курсе ребята. у меня есть тестовые файлы, делаю принты и асерты .Но условия выполняются а задача не проходит. в чем проблема, как понять? Regex пишу исходя из примера и нужного результата. вот код который валидатор принял
BufferedReader nameReader = new BufferedReader(new FileReader(fileNames.readLine()));
Вот который НЕ принял
File file = new File(nameReader.readline());
BufferedReader fReader = new BufferedReader(new Filereader(file));
писал - используйте FileReader , а я что использую ? как догадаться что ему нужно? Да в следующих задачах стали писать используйте FileReader с аргументом String, но как это было понять тогда?*
вторник, 00:57
Считать с консоли URL-ссылку. Вывести на экран через пробел список всех параметров (
Mikhail Kuragin17 уровень, Красноярск
29 июля, 17:36
Блин, наделал жуткого Г, Но на удивление всё сработало с первого раза. Пошёл почитать комменты, как можно было код сделать оптимальным, а тут такие - же как и я. Все только хвалятся, что всё работает, при чём по тем же идеям ((.
29 июля, 13:15
2 дня слома башки и 17 строк кода от main до первого alert(). Устроим челендж ?
Дмитрий Яковенко17 уровень, Москва
воскресенье, 11:13
Чуть выше есть кнопка "популярные", там человек решил за 12 строк вместе с аллертом. НО! Любой дурак может написать программу понятную компьютеру. И только хорошие программисты пишут код понятный человеку. © Поэтому лично я вынес весь функционал парсинга в отдельный класс, одним методом спокойно распарсил url на ключ=значение, вторым методом спокойно разобрал эти субстроки и запихнул в два массива, третьим методом спокойно вывел всё на экран. Главное, что текст получился читабельным, а экономия строчек - это от лукавого, мы ведь тут не место на жёстком диске экономим?;)))
T T16 уровень, Москва
27 июля, 12:30
Спустя 15 левелов захотелось поделится своими ощущениями! Задачка на слух воспринимается как сложная, так я ее и воспринял. Будем честны - она действительно трудна и на 1-10 уровнях я не смог бы ее решить за разумное время, а может и вообще не решил и просто содрал бы с лица кожу ногтями =) Однако, как только я к ней приступил - идеи по ее решению потекли рекой, я не ощутил момент притупления, когда пялишь в моник и думаешь - АЛЕ ТЫ КТО ВООБЩЕ ТАКОЙ ЧЕЛОВЕК? В конечном итоге время по ее решению свелось просто к написанию кода, подсматриванию нужных методов в документации. И... хочу сказать, что я очень рад этому, чувствую свой прогресс - это очень вдохновляет. Желаю и тебе того же! P.S. получившийся у меня код - жуткий ад говна, по сути, заточенный только под одну операцию, но все равно, как неожиданно и приятно, очень приятно
25 июля, 14:12
важные моменты: obj это имя параметра искать нужно не только числа с плавающей точкой, но вообще любые числа сделал через split("\\?), split("&"), split("=") сама задача нетрудная, а вот с выходными данными повозился
Дмитрий Яковенко17 уровень, Москва
воскресенье, 10:57
>> искать нужно не только числа с плавающей точкой, но вообще любые числа я вообще не искал числа, сделал так: try { Double db = Double.parseDouble(value.get(i)); alert(db); } catch (NumberFormatException e) { alert(value.get(i)); }
Vlad Gulyaev17 уровень, Санкт-Петербург
23 июля, 23:37
Да поможет вам стандартный класс URL :)
Timur18 уровень, Казань
21 июля, 20:42
Вот так вот! Задача успешно прошла тестирование! Вы решили задачу лучше, чем 61% учеников. Вам удалось ее решить с 1 попытки. Среднее количество попыток для этой задачи 3.52. Всего эту задачу решили 19120 учеников. Ваша награда: x16
Arseniy Zhuck22 уровень
21 июля, 17:55
Очень хорошая задача, прямо пока самое классное, что на JavaRush встречал, на мой взгляд, вышло максимально сухо, сплиты, массивы и двунаправленная мапа))) ну а try catch тут максимально оправдан, быстрее всего с его помощью alert сделать