Подскажите, пожалуйста, почему не пропускает валидатор, все тестовые тэги, которые я прогоняю, выдают корректный результат, по крайне мере, так мне кажется
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.HashMap;
import java.util.Map;
/*
Знакомство с тегами
*/
public class Solution {
private static ArrayList<Integer> openList = new ArrayList<>();
private static ArrayList<Integer> closeList = new ArrayList<>();
private static ArrayList<Integer> allList = new ArrayList<>();
private static HashMap<Integer, Integer> map = new HashMap<>();
public static void main(String[] args) throws Exception{
if (args.length < 1) return;
String nameTag = args[0];
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String fileName = bufferedReader.readLine();
bufferedReader.close();
BufferedReader bufferedReader1 = new BufferedReader(new FileReader(fileName));
ArrayList<String> strings = new ArrayList<>();
while (bufferedReader1.ready()){
strings.add(bufferedReader1.readLine());
}
bufferedReader1.close();
String stingResult = "";
for (String s : strings){
stingResult += s;
stingResult += "\n";
}
int iterator = 0;
while (stingResult.indexOf("<" + nameTag, iterator) >= 0){
iterator = stingResult.indexOf("<" + nameTag, iterator);
String currentTag = "<" + nameTag;
String str = stingResult.substring(iterator + currentTag.length(), iterator + currentTag.length() + 1);
if (str.equals(">")
|| str.equals(" ")
|| str.equals("\n")
|| str.equals(" ")){
openList.add(iterator);
}
iterator ++;
}
iterator = 0;
while (stingResult.indexOf("</" + nameTag + ">", iterator) >= 0){
iterator = stingResult.indexOf("</" + nameTag + ">", iterator);
closeList.add(iterator);
iterator ++;
}
for (int i : openList){
allList.add(i);
}
for (int i : closeList){
allList.add(i);
}
Collections.sort(allList);
int count = 0;
for (int i = 0; i < allList.size(); i++){
if (!ItOpen(i)) {
for (int j = i; j >= 0; j--){
if (ItOpen(j) && !map.containsKey(allList.get(j))){
map.put(allList.get(j), allList.get(i));
break;
}
}
}
}
ArrayList<String> arrayString = new ArrayList<>();
for (int i : openList){
String current = stingResult.substring(i, map.get(i));
arrayString.add(current);
int i2 = stingResult.indexOf(">",map.get(i));
String str1 = "</" + nameTag;
String out = current + "</" + nameTag + stingResult.substring(map.get(i) + str1.length(), i2 + 1);
System.out.println(out.replaceAll("\n",""));
}
}
public static boolean ItOpen(int index){
int current = allList.get(index);
return openList.contains(current);
}
}