Подскажите куда смотреть Код работает корректно
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;
    }
}