Guest User

Untitled

a guest
Oct 23rd, 2017
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.83 KB | None | 0 0
  1. package com.javarush.task.task19.task1918;
  2.  
  3. /*
  4. Знакомство с тегами
  5. */
  6.  
  7. import java.io.BufferedReader;
  8. import java.io.FileReader;
  9. import java.io.IOException;
  10. import java.io.InputStreamReader;
  11. import java.util.LinkedList;
  12. import java.util.regex.Matcher;
  13. import java.util.regex.Pattern;
  14. import java.util.stream.Collectors;
  15.  
  16. public class Solution {
  17. public static void main(String[] args) {
  18. if (args.length == 0) return;
  19. try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  20. BufferedReader readF = new BufferedReader(new FileReader(reader.readLine()));
  21. ) {
  22. String tag = args[0];
  23. String html = readF.lines().collect(Collectors.joining());
  24. Matcher tagOpen = Pattern.compile("<" + tag).matcher(html);
  25. Matcher tagClose = Pattern.compile("</" + tag + ">").matcher(html);
  26. LinkedList<Integer> openStack = new LinkedList<>();
  27. LinkedList<Integer> closeStack = new LinkedList<>();
  28. int counter=0;
  29. int next_start=0;
  30. while (tagClose.find()) { //пока есть закрывающий тег, находим его.
  31. closeStack.add(tagClose.end()); //добавить конец закр. тега в стек
  32. counter--;
  33. while (tagOpen.find(next_start) && tagOpen.start() < tagClose.end()) { //от последней обработанной позиции стартового тега, не перескакивая через текущий закрывающий.
  34. openStack.add(tagOpen.start()); //добавить начало откр тега в стек2
  35. counter++;
  36. next_start=tagOpen.end(); //сохраняем последнюю обработанную стартовую позицию
  37. }
  38. while (counter>0){ //донаходим концы закрывающих тегов парных количеству открывающих
  39. tagClose.find();
  40. closeStack.add(tagClose.end()); //ложим в стек
  41. counter--;
  42. }
  43. while(openStack.size()>0){ //пока в стеке есть теги (т.к. теги парные, стеки равны и все равно какой брать)
  44. System.out.println(html.substring(openStack.removeFirst(),closeStack.removeLast()));//содержимое пары тегов, и удаление их из стеков
  45. }
  46. tagOpen.reset(); //сбрасываем матчер - возможно лишнее, т.к. поиск по нему всеравно "с позиции".
  47. }
  48. System.out.println();
  49. } catch (IOException e) {
  50.  
  51. }
  52. }
  53. }
Add Comment
Please, Sign In to add comment