Заранее извиняюсь за возможно не совсем читабельный код, но все же мне очень хотелось бы понять, в чем моя ошибка.
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.HashMap;
import java.util.Map;
import java.util.TreeMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
Знакомство с тегами
*/
public class Solution {
public static void main(String[] args) {
String fileName = null;
try (BufferedReader input = new BufferedReader(new InputStreamReader(System.in))) {
fileName = input.readLine();
} catch (IOException e) {
throw new RuntimeException(e.getMessage());
}
findTags(fileName, args[0]);
}
private static void findTags(String fileName, String tag) {
Pattern p1 = Pattern.compile("<" + tag);
Pattern p2 = Pattern.compile("</" + tag + ">");
StringBuilder htmlInLine = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
while (reader.ready()) {
htmlInLine.append(reader.readLine());
}
} catch (IOException e) {
throw new RuntimeException(e.getMessage());
}
String line = htmlInLine.toString();
Matcher m1 = p1.matcher(line);
Matcher m2 = p2.matcher(line);
ArrayList<Integer> startsOfTag = new ArrayList<>();
ArrayList<Integer> endsOfTag = new ArrayList<>();
while (m1.find() && m2.find()) {
startsOfTag.add(m1.start());
endsOfTag.add(m2.end());
}
TreeMap<Integer, Integer> tagsContent = new TreeMap<>();
for (int i = startsOfTag.size() - 1; i >= 0; i--) {
for (int j = 0; j < endsOfTag.size(); j++) {
if (endsOfTag.get(j) > startsOfTag.get(i)) {
tagsContent.put(startsOfTag.get(i), endsOfTag.get(j));
startsOfTag.remove(i);
endsOfTag.remove(j);
}
}
}
for (Map.Entry<Integer, Integer> entry : tagsContent.entrySet()) {
System.out.println(line.substring(entry.getKey(), entry.getValue()));
}
}
}