вывод правильный, пробовал на разных вариантах, а валидацию не проходит все равно
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;
/*
Знакомство с тегами
*/
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String fileName = reader.readLine();
reader.close();
String openTag = "<" + args[0];
String closeTag = "</" + args[0];
try (BufferedReader input = new BufferedReader(new FileReader(fileName))) {
String x;
String sourceText = "";
while ((x = input.readLine()) != null) {
sourceText += x;
}
String[] garbage = sourceText.substring(sourceText.indexOf(openTag)).replace("\n", "").split(openTag); // ignore array
String[] words = new String[garbage.length - 1]; // need array
for (int i = 0; i < words.length; i++) {
words[i] = garbage[i + 1];
}
for (int i = 0; i < words.length; i++) { // add array with openTag
words[i] = openTag + words[i];
}
ArrayList<String> list = resultWords(words, openTag, closeTag);
ArrayList<String> list2 = new ArrayList<>();
for (String y : list) {
if (getTagNum(y, openTag) > 1) {
String[] wordsres = parseStr(y, openTag, closeTag);
for (int i = 0; i < wordsres.length; i++) {
list2.add(wordsres[i]);
}
}else {
list2.add(y);
}
}
for (String h : list2) {
System.out.println(h);
}
}
}
public static int getTagNum(String str, String tag) {
int count = 0;
while (str.contains(tag)) {
str = str.substring(str.indexOf(tag) + tag.length());
count++;
}
return count;
}
public static ArrayList<String> resultWords(String[] inputWords, String tag, String tag2) {
ArrayList<String> resWords = new ArrayList<>();
ArrayList<String> newWords = new ArrayList<>();
Collections.addAll(newWords, inputWords);
int j = 1;
for (int i = 0; i < newWords.size();) {
while (!(getTagNum(newWords.get(i), tag) == getTagNum(newWords.get(i), tag2))) {
newWords.set(i, newWords.get(i) + newWords.get(j));
j++;
}
resWords.add(newWords.get(i));
i = j;
j++;
}
return resWords;
}
public static String[] parseStr(String str, String tag, String tag2) {
int innerTagNum = (getTagNum(str, tag));
String[] result = new String[innerTagNum];
result[0] = str;
for (int i = 1; i < innerTagNum; i++) {
String x = str.substring(str.indexOf(tag, tag.length()), str.indexOf(tag2) + tag2.length() + 1);
result[i] = x;
str = str.replaceFirst(x, "");
}
return result;
}
}