Проверка последовательности тегов
Друзья, прошу вас о помощи. Уже сломал себе мозг. 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();
}
}
}