Задание : Считай с консоли имя файла, который имеет HTML-формат.
Пример:
Info about Leela <>Turanga Leela
Supergirl
Первым параметром в метод main приходит тег. Например, "span".
Вывести на консоль все теги, которые соответствуют заданному тегу.
Каждый тег на новой строке, порядок должен соответствовать порядку следования в файле.
Количество пробелов, \n, \r не влияют на результат.
Файл не содержит тег CDATA, для всех открывающих тегов имеется отдельный закрывающий тег, одиночных тегов нет.
Тег может содержать вложенные теги.
Пример вывода:
Turanga Leela
Turanga Leela
Super
girl
Т.е я должен идти по строке и искать символ '<', если следующий символ 's', получается '<s', то я начинаю записывать строку, а вот как найти конец, плюсом есть вложенные теги. Видимо JR съедает все теги, вот ссылка на само задание https://javarush.com/tasks/com.javarush.task.task19.task1918
Semyon Baryshnikov
30 уровень
Не понимаю алгоритм.
Обсуждается
Комментарии (8)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Александр Лукьянов
20 ноября 2023, 10:34
Используй библиотеку Jsoup. Эта библиотека парсит данные теги. Там решение через библиотеку в 3 строчки. А регулярками долгое дело, но зато их подтянешь, но и то не факт что валидатор пропустит решение.
0
Semyon Baryshnikov QA Automation Engineer
20 ноября 2023, 10:40
Хотелось бы конечно пока без доп библиотек решить.
+2
Anonymous #3303140
20 ноября 2023, 10:59
Jsoup - это стандарт для работы с HTML.
На уровень решения конкретно этой задачи хватит использования регулярок и работы с текстом, но здесь ответ, почему глобально так делать не стоит:
https://stackoverflow.com/a/1732454
https://stackoverflow.com/a/590789
Хочешь всё равно ковыряться с текстом - ковыряйся. Найди открывающие теги, соответствующие закрывающие, между ними - тело тега. Не забывай, что название тега приходит параметром. Тег ограничен символами < и >, вне тегов эти символы экранируются. Не забывай, что у тега могут быть атрибуты:
0
Semyon Baryshnikov QA Automation Engineer
20 ноября 2023, 11:02
Хорошо, сейчас попробую с библиотекой.
0
Денис Enterprise Java Developer
20 ноября 2023, 12:39
Еще б валидатор умел задачу с библиотекой принимать, вообще бы круто. А парсить HTML регулярками в самом деле тупо.
Семён: Тебе нужно познакомиться с так называемым стековым алгоритмом. Принцип тот же что и у стека, тебе нужно отслеживать состояние. Читаешь строку, нашёл условие начала - начинаешь считывать объект, встретил еще одно начало - начинаешь считывать новый объект. Встретил конец, значит это закончился последний из начатых объектов. Ну и так далее.
0
Semyon Baryshnikov QA Automation Engineer
20 ноября 2023, 12:54
Похоже на то, как я хотел сделать изначально. Если не трудно, подкинь пожалуйста материал по стековым алгоритмам. Спасибо.
0
Денис Enterprise Java Developer
20 ноября 2023, 12:57
Да я собственно все и написал :) реализуешь принцип FI-LO и все. Можешь например придумать какую-то модель данных и прям стеком и пользоваться сразу.
+1
Стас Пасинков Software Developer в Zipy Master
20 ноября 2023, 23:20
можеш просто завести лічильник дужечок.
коли знайшов нову відкриваючу дужку - робиш counter++
коли знайшов закриваючу - робиш counter--
ну і перевірку додати шо всі дужечки закрились)
але це тривіальний алгоритм. варіант зі стеком може бути навіть круче)
ЗІ: ріспект, шо хотів вирішити без додаткових ліб 👍
+1