//When he had said this, one of the officers standing by slapped Jesus with his hand, saying, "Do you answer the high priest like that?" (John 18:22) package com.javarush.task.task19.task1918; /* Знакомство с тегами */ import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class Solution { public static void main(String[] args) throws IOException { BufferedReader conReader = new BufferedReader(new InputStreamReader(System.in)); String fileName = conReader.readLine(); conReader.close(); //Read File BufferedReader fileBufReader = new BufferedReader(new FileReader(fileName)); StringBuffer content = new StringBuffer(); while (fileBufReader.ready()) content.append(fileBufReader.readLine()); fileBufReader.close(); StringBuffer text = new StringBuffer(content.toString().replaceAll("\r\n", "")); String tagOpen = "<" + args[0]; String tagClose = ""; int pozitionOpen = -1; int pozitionClose = -1; int shift = -1; Stack openedTags = new Stack<>(); Map tags = new TreeMap<>(new MyComparator()); while (true) { pozitionOpen = text.indexOf(tagOpen, shift); pozitionClose = text.indexOf(tagClose, shift); if (pozitionOpen < 0 && pozitionClose < 0) break; if (pozitionOpen != -1 && pozitionOpen < pozitionClose) { //Open ближе чем close openedTags.push(pozitionOpen); shift = pozitionOpen + tagOpen.length(); continue; } if (pozitionClose != -1 && (pozitionOpen > pozitionClose || pozitionOpen == -1)) { //Close ближе чем open if (openedTags.isEmpty()) break; tags.put(openedTags.pop(), pozitionClose + tagClose.length()); shift = pozitionClose + tagClose.length(); } } for (Map.Entry pair : tags.entrySet()) { System.out.println(text.substring(pair.getKey(), pair.getValue())); } } static class MyComparator implements Comparator { @Override public int compare(Integer a, Integer b) { return a.compareTo(b); } } } /* Знакомство с тегами Считайте с консоли имя файла, который имеет HTML-формат. Пример: Info about Leela Turanga Leela Supergirl Первым параметром в метод main приходит тег. Например, «span«. Вывести на консоль все теги, которые соответствуют заданному тегу. Каждый тег на новой строке, порядок должен соответствовать порядку следования в файле. Количество пробелов, n, r не влияют на результат. Файл не содержит тег CDATA, для всех открывающих тегов имеется отдельный закрывающий тег, одиночных тегов нет. Тег может содержать вложенные теги. Пример вывода: Turanga Leela Turanga Leela Super girl Шаблон тега: text1 text1 text1 text1, text2 могут быть пустыми Требования: 1. Программа должна считывать имя файла с консоли (используй BufferedReader). 2. BufferedReader для считывания данных с консоли должен быть закрыт. 3. Программа должна считывать содержимое файла (используй FileReader). 4. Поток чтения из файла (FileReader) должен быть закрыт. 5. Программа должна выводить в консоль все теги, которые соответствуют тегу, заданному в параметре метода main. package com.javarush.task.task19.task1918; * Знакомство с тегами * public class Solution { public static void main(String[] args) { } } */