Реализовал через стек. Валя ругается, что не все теги вывожу. Подскажите, какой вариант я не учел?
package com.javarush.task.task19.task1918;
import java.io.*;
import java.util.ArrayList;
import java.util.Map;
import java.util.Stack;
import java.util.TreeMap;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
/*
Знакомство с тегами
*/
public class Solution {
static {
// System.setIn(new ByteArrayInputStream("test.txt".getBytes()));
}
public static void main(String[] args) throws IOException{
if (args.length != 1) return;
Map<Integer,String> map = getTags(getFileData(), args[0]);
printMap(map);
}
private static Map<Integer, String> getTags(String fileData, String tag) {
Map<Integer,String> result = new TreeMap<>();
Matcher m = Pattern.compile("<\\/?"+tag+".*?>").matcher(fileData);
Stack<Integer> tagsStartIndex = new Stack<>();
while (m.find()) {
if (m.group().substring(0,2).equals("</")) {
int begin = tagsStartIndex.pop();
result.put(begin, fileData.substring(begin, m.end()));
}
else {
tagsStartIndex.push(m.start());
}
}
return result;
}
private static void printMap(Map<Integer, String> map) {
for (Map.Entry entry : map.entrySet()) {
System.out.println(entry.getValue());
}
}
private static String getFileData(){
StringBuilder fileData = new StringBuilder();
try (
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedReader fileReader = new BufferedReader(new FileReader(reader.readLine()));
) {
while (fileReader.ready()) {
fileData.append(fileReader.readLine());
}
}
catch (IOException e) {
e.printStackTrace();
}
return fileData.toString();
}
}