Подскажите куда смотреть
Код работает корректно
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
FileReader fileReader = new FileReader(reader.readLine());
reader.close();
// D:\\javaRush_txt\\task1918_HTML.txt
String htmlText = "";
while (fileReader.ready()) {
int data = fileReader.read();
htmlText += (char) data;
}
fileReader.close();
String tagName = args[0];
String currSeparated = "";
String tagInside = "";
ArrayList<String> tagList;
try {
tagList = SeparateByTag(htmlText, tagName);
int k = 0;
// Проверка наличия внутренних искомых тегов
while (true) {
currSeparated = tagList.get(k);
tagInside = currSeparated // строка, исключает
.substring(
currSeparated.indexOf(">") + 1, // внешние искомые теги
currSeparated.lastIndexOf("</")
);
if (tagInside.contains(tagName)) { // проверка наличия внутренних искомых тегов
ArrayList<String> innerTagList = SeparateByTag(tagInside, tagName); //
for (int j = 0; j < innerTagList.size(); j++) {
k++;
tagList.add(k, innerTagList.get(j)); // добавление строк искомых внутренних тегов
} // по порядку после искомого тега-родителя
}
k++;
if (k == tagList.size()) break;
}
for (int i = 0; i < tagList.size(); i++) {
System.out.println(tagList.get(i));
}
} catch (IndexOutOfBoundsException e) {
System.out.println(e);
System.out.println("No tag \"" + tagName + "\" found");
}
} // close main
public static ArrayList<String> SeparateByTag (String htmlText, String tagName) {
ArrayList<String> result = new ArrayList<String>();
boolean isTag = false; // искомый Тег не найден
boolean isOpenTag = false; // первая скобка открытия тега не найдена
boolean isCloseTag = false; // первая скобка закрытия тега не найдена
String tagBuffer = "";
String tagOpen = "<" + tagName; // первая скобка октрытия тега + искомый тег
int countOpenTags = 0; // счетчик открытых тегов
for (int i = 0; i < htmlText.length(); i++) {
char currChar = htmlText.charAt(i);
if (!isOpenTag) { // поиск начала открытия к-л тега
if (currChar == '<') {
isOpenTag = true; // начало к-л тега найдена
tagBuffer += currChar; // добавляем текущий символ
}
} else {
if (!isTag) { // поиск открытия искомого тега
if (currChar == ' ' || currChar == '>') { // условие <tag text2>text1</tag> || <tag>text1</tag>
if (tagBuffer.equals(tagOpen)) { // искомый тег открытия найден
isTag = true;
tagBuffer += currChar;
} else {
tagBuffer = ""; // текущий тег не искомый
isOpenTag = false; // флаг поиска следующего тега
}
} else {
tagBuffer += currChar;
}
} else {
if (currChar == '<') { // поиск начала открытия внутренних тегов
char nextChar = htmlText.charAt(i+1); // или
if (nextChar == '/') { // закрытия текущего открытого искомого тега
countOpenTags--; // счетчик закрытых внутренних тегов
if (countOpenTags == -1) { // если все открытые внутренние теги закрыты
isCloseTag = true; // текущий открытый искомый тег закрыт
}
} else {
countOpenTags++; // счетчик открытых внутренних тегов
}
}
tagBuffer += currChar;
if (isCloseTag) {
if (currChar == '>') {
result.add(tagBuffer); // добавляем в список текущий искомый тег
isTag = false;
isOpenTag = false;
isCloseTag = false;
tagBuffer = "";
countOpenTags = 0;
}
} // close if
} // close else
} // close else
} // close for
return result;
}
}