Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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.ArrayList;
- import java.util.Map;
- import java.util.TreeMap;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- /*Знакомство с тегами
- Считайте с консоли имя файла, который имеет HTML-формат.
- Пример:
- Info about Leela <span xml:lang="en" lang="en"><b><span>Turanga Leela
- </span></b></span><span>Super</span><span>girl</span>
- Первым параметром в метод main приходит тег. Например, "span".
- Вывести на консоль все теги, которые соответствуют заданному тегу.
- Каждый тег на новой строке, порядок должен соответствовать порядку следования в файле.
- Количество пробелов, \n, \r не влияют на результат.
- Файл не содержит тег CDATA, для всех открывающих тегов имеется отдельный закрывающий тег, одиночных тегов нет.
- Тег может содержать вложенные теги.
- Пример вывода:
- <span xml:lang="en" lang="en"><b><span>Turanga Leela</span></b></span>
- <span>Turanga Leela</span>
- <span>Super</span>
- <span>girl</span>
- Шаблон тега:
- <tag>text1</tag>
- <tag text2>text1</tag>
- <tag
- text2>text1</tag>
- text1, text2 могут быть пустыми
- Требования:
- 1. Программа должна считывать имя файла с консоли (используй BufferedReader).
- 2. BufferedReader для считывания данных с консоли должен быть закрыт.
- 3. Программа должна считывать содержимое файла (используй FileReader).
- 4. Поток чтения из файла (FileReader) должен быть закрыт.
- 5. Программа должна выводить в консоль все теги, которые соответствуют тегу, заданному в параметре метода main.*/
- public class Solution {
- public static void main(String[] args) throws IOException {
- BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
- String fileName = reader.readLine();
- reader.close();
- // считываю файл в String str
- FileReader fileR = new FileReader(fileName);
- StringBuffer buffer = new StringBuffer();
- while (fileR.ready()){
- int ch = fileR.read();
- buffer.append((char) ch);
- }
- String str = buffer.toString();
- fileR.close();
- //cоздаю 2 листа с индексами начала и конца строк
- ArrayList<Integer> listEnd = new ArrayList<>();
- ArrayList<Integer> listStart = new ArrayList<>();
- ArrayList<String> list = new ArrayList<>();
- // ругулярка определяет или тег открытия, или тег закрытия. (<tag someText> | </tag>)
- String t= args[0];
- Pattern p = Pattern.compile("<" + t + "|</" + t + ">");
- Matcher m = p.matcher(str);
- while (m.find()) { //
- if (m.group().equals("</"+args[0]+">")){ //если тег закрытия
- listEnd.add(m.end()); //заношу индекс конца сторки
- }
- else {
- listStart.add(m.start()); // если тег открытия заношу индекс начала строки
- }
- if(listStart.size()==listEnd.size()&& listStart.size()>0){ // если количество тегов(ткрытия,закрытия равно)
- while(listStart.size()!=0){ //печатаем выражения беря индексы начала и конца, снимаем обвертки удаляя начальные и конечные индексы.
- //System.out.println(str.substring(listStart.get(0),listEnd.get(listEnd.size()-1)));
- list.add(str.substring(listStart.get(0),listEnd.get(listEnd.size()-1)));
- listStart.remove(0);
- listEnd.remove(listEnd.size()-1);//соответсвенно в конце получаем пустой список
- }
- }
- }
- for (int i = 0; i < list.size() ; i++) {
- System.out.println(list.get(i).replaceAll("\n", ""));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement