Advertisement
jaVer404

level19.lesson10.bonus03 (deep in between)

May 5th, 2016
365
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.29 KB | None | 0 0
  1. package com.javarush.test.level19.lesson10.bonus03;
  2.  
  3. /* Знакомство с тегами
  4. Считайте с консоли имя файла, который имеет HTML-формат
  5. Пример:
  6. Info about Leela <span xml:lang="en" lang="en"><b><span>Turanga Leela
  7. </span></b></span><span>Super</span><span>girl</span>
  8. Первым параметром в метод main приходит тег. Например, "span"
  9. Вывести на консоль все теги, которые соответствуют заданному тегу
  10. Каждый тег на новой строке, порядок должен соответствовать порядку следования в файле
  11. Количество пробелов, \n, \r не влияют на результат
  12. Файл не содержит тег CDATA, для всех открывающих тегов имеется отдельный закрывающий тег, одиночных тегов нету
  13. Тег может содержать вложенные теги
  14. Пример вывода:
  15. <span xml:lang="en" lang="en"><b><span>Turanga Leela</span></b></span>
  16. <span>Turanga Leela</span>
  17. <span>Super</span>
  18. <span>girl</span>
  19.  
  20. Шаблон тега:
  21. <tag>text1</tag>
  22. <tag text2>text1</tag>
  23. <tag
  24. text2>text1</tag>
  25.  
  26. text1, text2 могут быть пустыми
  27. */
  28.  
  29. import java.io.BufferedReader;
  30. import java.io.FileReader;
  31. import java.io.IOException;
  32. import java.io.InputStreamReader;
  33. import java.util.Map;
  34. import java.util.TreeMap;
  35. import java.util.regex.*;
  36.  
  37. public class Solution {
  38.     public static void main(String[] args) {
  39.         BufferedReader readName = null;
  40.         try
  41.         {
  42.             //readName = new BufferedReader(new InputStreamReader(System.in));//add after test
  43.             //String fileName = readName.readLine();//add after test
  44.             String myTag = "span";//DELETE after test
  45.             String fileName = "d:\\Test_files\\Input.html";//DELETE after test
  46.             String openTag = String.format("<%s",myTag);//replace myTag with args[0]
  47.             String closeTag = String.format("</%s>",myTag);
  48.             String fileText = fileToString(fileName);
  49.             TreeMap<Integer, String>myTags = new TreeMap<>();
  50.             addTags(fileText,openTag,myTags);
  51.             addTags(fileText,closeTag,myTags);
  52.             //или разделить на два дерева.
  53. //             public static int factorial(int N) {
  54. //             if (N == 1) return 1;
  55. //             return N * factorial(N-1);
  56. //             }
  57.  
  58.             for (Map.Entry<Integer,String>entry : myTags.entrySet()) {
  59.                 System.out.println(entry.getKey() + " " + entry.getValue());
  60.             }
  61.             voyage_voyage(fileText,openTag,myTags);
  62.         }
  63.         catch (Exception e) {}
  64.     }
  65.  
  66.     public static String fileToString (String fileToRead) {
  67.         StringBuilder contentBuilder = new StringBuilder();
  68.         try
  69.         {
  70.             BufferedReader in = new BufferedReader(new FileReader(fileToRead ));
  71.             String str;
  72.             while ((str=in.readLine())!=null) {
  73.                 contentBuilder.append(str);
  74.             }
  75.             in.close();
  76.         }
  77.         catch (IOException e)
  78.         {
  79.         }
  80.         return contentBuilder.toString();
  81.     }
  82.  
  83.     public static void addTags (String someText, String toFind, TreeMap<Integer,String> smTg)
  84.     {
  85.         int lastIndex = 0;
  86.         String temp;
  87.         while (lastIndex!=-1)
  88.         {
  89.             lastIndex = someText.indexOf(toFind,lastIndex);
  90.             if (lastIndex != -1)
  91.             {
  92.                 temp = someText.substring(lastIndex,(someText.indexOf(">",lastIndex))+1);
  93.                 smTg.put(lastIndex,temp);
  94.                 lastIndex += temp.length();
  95.             }
  96.         }
  97.     }
  98.  
  99.  
  100.     /**
  101.      * 0. Нам нужны индексы (открывающий у нас есть)
  102.      * 1. Есть закрывающие, но где чьи?
  103.      * 2. Если после открывающего идет еще открывающий
  104.      *      добавляем на счетчике +1, если есть закрывающий -1
  105.      *  3. Если счетчик на 0 и есть закрывающий,
  106.      *      ищем его закрывающий индекс к открыв + длину тега
  107.      *      3.1 Берем индекс открывающего - закрывающий и субстринг
  108.      *          добавляем в value
  109.      *          !!!как
  110.      *          берем по очереди первый открывающий и его закрывающий
  111.      * */
  112.     public static String voyage_voyage(String someText, String someTag, TreeMap<Integer,String>myMap) {
  113.         String closeTag ="<"+"/"+someTag;
  114.         String patternString = closeTag+">";
  115.         Pattern pattern = Pattern.compile(patternString, Pattern.DOTALL);
  116.  
  117.  
  118.         for (Map.Entry<Integer,String> entry : myMap.entrySet()) {
  119.             Matcher matcher = pattern.matcher(entry.getValue());
  120.             boolean matchFound= matcher.matches();
  121.  
  122.             if (matchFound==true) {
  123.                 System.out.println(entry.getValue());
  124.                 System.out.println("matches");
  125.             }
  126.         }
  127.         return "";
  128.     }
  129. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement