В чем ошибка? Прогнала множество вариантов - вывод правильный. Что я упустила?
package com.javarush.task.task19.task1918;
import java.io.*;
import java.util.ArrayList;
import java.util.regex.*;
import java.util.TreeMap;
/*
Знакомство с тегами
*/
public class Solution {
public static void main(String[] args) throws IOException{
ArrayList<String> result = new ArrayList<>();
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
String fileName = input.readLine();
input.close();
ArrayList<String> str = new ArrayList<>();
BufferedReader reader = new BufferedReader(new FileReader(fileName));
while (reader.ready()) {
str.add(reader.readLine());
}
reader.close();
Matcher matcherOpen;
Matcher matcherClose;
for (String line: str) {
TreeMap<Integer, String> tree = new TreeMap<>();
ArrayList<Integer> open = new ArrayList<>();
ArrayList<Integer> close = new ArrayList<>();
matcherOpen = Pattern.compile("<" + args[0] + ">|<" + args[0] + " (.+?)>").matcher(line);
matcherClose = Pattern.compile("</" + args[0] + ">").matcher(line);
while (matcherOpen.find()) {
open.add(matcherOpen.start());
}
while (matcherClose.find()) {
close.add(matcherClose.end());
}
ArrayList<Integer> openDouble = new ArrayList<>(open);
int min =0;
int position = 0;
for (int i = 0; i < close.size(); i++) {
for (int j = 0; j < openDouble.size(); j++) {
if (close.get(i) - 1 > openDouble.get(j)) {
min = openDouble.get(j);
position = j;
}
}
tree.put(open.indexOf(min), line.substring(min, close.get(i)));
openDouble.remove(position);
}
result.addAll(tree.values());
}
for (String line: result) {
System.out.println(line);
}
}
}
вложенные тэги в одной строке, у вас как будто каждый тэг это одна строка, и по моему без учёта вложености, насколько я понял вы просто ищите первый закрывающийся тэг и ближайщий к нему открывающийся, но не учитываете вложеность, я не нашёл этого.