Advertisement
mamant38

Tegi((((((((Tegi Tegi Tegi Tegi

Jun 4th, 2018
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.73 KB | None | 0 0
  1. package com.javarush.task.task19.task1918;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.FileReader;
  5. import java.io.IOException;
  6. import java.io.InputStreamReader;
  7. import java.util.ArrayList;
  8. import java.util.Map;
  9. import java.util.TreeMap;
  10. import java.util.regex.Matcher;
  11. import java.util.regex.Pattern;
  12. /*Знакомство с тегами
  13. Считайте с консоли имя файла, который имеет HTML-формат.
  14.  
  15. Пример:
  16. Info about Leela <span xml:lang="en" lang="en"><b><span>Turanga Leela
  17. </span></b></span><span>Super</span><span>girl</span>
  18.  
  19. Первым параметром в метод main приходит тег. Например, "span".
  20. Вывести на консоль все теги, которые соответствуют заданному тегу.
  21. Каждый тег на новой строке, порядок должен соответствовать порядку следования в файле.
  22. Количество пробелов, \n, \r не влияют на результат.
  23. Файл не содержит тег CDATA, для всех открывающих тегов имеется отдельный закрывающий тег, одиночных тегов нет.
  24. Тег может содержать вложенные теги.
  25.  
  26. Пример вывода:
  27. <span xml:lang="en" lang="en"><b><span>Turanga Leela</span></b></span>
  28. <span>Turanga Leela</span>
  29. <span>Super</span>
  30. <span>girl</span>
  31.  
  32. Шаблон тега:
  33. <tag>text1</tag>
  34. <tag text2>text1</tag>
  35. <tag
  36. text2>text1</tag>
  37.  
  38. text1, text2 могут быть пустыми
  39.  
  40.  
  41. Требования:
  42. 1. Программа должна считывать имя файла с консоли (используй BufferedReader).
  43. 2. BufferedReader для считывания данных с консоли должен быть закрыт.
  44. 3. Программа должна считывать содержимое файла (используй FileReader).
  45. 4. Поток чтения из файла (FileReader) должен быть закрыт.
  46. 5. Программа должна выводить в консоль все теги, которые соответствуют тегу, заданному в параметре метода main.*/
  47. public class Solution {
  48.  
  49.     public static void main(String[] args) throws IOException {
  50.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  51.         String fileName = reader.readLine();
  52.         reader.close();
  53.  
  54.         // считываю файл в String str
  55.         FileReader fileR = new FileReader(fileName);
  56.         StringBuffer buffer = new StringBuffer();
  57.         while (fileR.ready()){
  58.             int ch = fileR.read();
  59.             buffer.append((char) ch);
  60.         }
  61.         String str = buffer.toString();
  62.         fileR.close();
  63.  
  64.  
  65.         //cоздаю 2 листа с индексами начала и конца строк
  66.         ArrayList<Integer> listEnd = new ArrayList<>();
  67.         ArrayList<Integer> listStart = new ArrayList<>();
  68.         ArrayList<String> list = new ArrayList<>();
  69.  
  70.         // ругулярка определяет или тег открытия, или тег закрытия. (<tag someText> | </tag>)
  71.         String t= args[0];
  72.         Pattern p = Pattern.compile("<" + t + "|</" + t + ">");
  73.         Matcher m = p.matcher(str);
  74.         while (m.find()) { //
  75.             if (m.group().equals("</"+args[0]+">")){ //если тег закрытия
  76.                 listEnd.add(m.end()); //заношу индекс конца сторки
  77.             }
  78.             else {
  79.                 listStart.add(m.start()); // если тег открытия заношу индекс начала строки
  80.             }
  81.             if(listStart.size()==listEnd.size()&& listStart.size()>0){ // если количество тегов(ткрытия,закрытия равно)
  82.                 while(listStart.size()!=0){ //печатаем выражения беря индексы начала и конца, снимаем обвертки удаляя начальные и конечные индексы.
  83.                     //System.out.println(str.substring(listStart.get(0),listEnd.get(listEnd.size()-1)));
  84.                     list.add(str.substring(listStart.get(0),listEnd.get(listEnd.size()-1)));
  85.                     listStart.remove(0);
  86.                     listEnd.remove(listEnd.size()-1);//соответсвенно в конце получаем пустой список
  87.                 }
  88.             }
  89.         }
  90.         for (int i = 0; i < list.size() ; i++) {
  91.             System.out.println(list.get(i).replaceAll("\n", ""));
  92.         }
  93.  
  94.  
  95.     }
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement