Проверка последовательности тегов

Друзья, прошу вас о помощи. Уже сломал себе мозг. 2 дня не могу решить задачку. Суть задачи

Написать программу, которая будет проверять синтаксис произвольной последовательности тэгов; Последовательность считается правильной если каждый открытый тэг имеет соотв ему закрывающий тэг. Пример правильных последовательностей:

<tag1><tag2></tag2><tag3></tag3></tag1>

Программа должна уметь определить была ли сделана ошибка в последовательности (нехватка открывающего или закрывающего тега, непонятные вложенные тэги и тд)

Я ложу все теги в массив. Потом в цикле перебираю массив, каждый открытый тег, ложу в стек. Когда попадается закрытый тег, я ставниваю верхушку стека и данным тегом если они одинаковые достаю из стека (удаляю) елемент и итерируюсь дальше. НО я не могу придумать алгоритм при котором когда попадется неизвестный тег.

Я уже перепробовал все что только смог придумать. Вот некоторые кусочки кода.

 Stack<String> openTag = new Stack<>();

//Отрытый или закрытый тег
private static boolean isOpenTag(String tag) {
    return tag.charAt(1) != '/';
}

//сравнивает открытый и закрытый теги
private static boolean isEquals(String startTag, String endTag) throws EmptyStackException {
    return startTag.regionMatches(1, endTag, 2, startTag.length() - 2);
}

//Метод получает массив всех тегов
private void scanner(ArrayList<String> tags) {

    for (String tag : tags) {

        if (isOpenTag(tag)) {
            openTag.push(tag);
        } else if (isEquals(openTag.peek(),tag)) {
            System.out.println(openTag.peek() +  isEquals(openTag.peek(),tag) + tag);
            openTag.pop();
        }
    }
}

Ответы (0 шт):