Я хз короче. Прогнал вроде все варианты входных данных (проверку на первый открывающий и тд не делал только). Не проходит последний пункт. Подкиньте вариант, на котором закрашится.
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.Collections;
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) throws IOException {
String fileName;
try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in))) {
fileName = bufferedReader.readLine();
}
// fileName = "D:/venom/output.txt";
String tagFile = "";
ArrayList<Integer> arrayListOpen = new ArrayList<>();
ArrayList<Integer> arrayListClose = new ArrayList<>();
TreeMap<Integer, String> stringMap = new TreeMap<>();
String openTag = "<" + args[0];
String closeTag = "</" + args[0] + ">";
try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
while (reader.ready()) {
tagFile += reader.readLine();
}
}
Pattern patternOpen = Pattern.compile(openTag);
Matcher matcherOpen = patternOpen.matcher(tagFile);
while (matcherOpen.find()) {
arrayListOpen.add(matcherOpen.start());
}
Pattern pattern = Pattern.compile(closeTag);
Matcher matcher = pattern.matcher(tagFile);
while (matcher.find()) {
arrayListClose.add(matcher.start());
}
ArrayList<Integer> allIndex = new ArrayList<>(arrayListOpen);
allIndex.addAll(arrayListClose);
Collections.sort(allIndex);
while (arrayListClose.size() > 0) {
for (int i = 1; i < allIndex.size(); i++) {
if (arrayListOpen.contains(allIndex.get(i - 1)) && arrayListClose.contains(allIndex.get(i))) {
stringMap.put(allIndex.get(i - 1), tagFile.substring(allIndex.get(i - 1), allIndex.get(i) + 7));
arrayListOpen.remove(allIndex.get(i - 1));
arrayListClose.remove(allIndex.get(i));
allIndex.remove(i);
allIndex.remove(i - 1);
break;
}
}
}
for (Map.Entry pair : stringMap.entrySet()) {
System.out.println(pair.getValue());
}
}
}