Ответ Ganesan выше неверен, и StackOverflow не позволяет мне прокомментировать или отредактировать его сообщение. Итак, ниже приведен правильный ответ. Ganesan имеет неправильную обратную сторону "[" и отсутствует проверка стека isEmpty ().
Приведенный ниже код вернет true, если фигурные скобки должным образом совпадают.
public static boolean isValidExpression(String expression) {
Map<Character, Character> openClosePair = new HashMap<Character, Character>();
openClosePair.put(')', '(');
openClosePair.put('}', '{');
openClosePair.put(']', '[');
Stack<Character> stack = new Stack<Character>();
for(char ch : expression.toCharArray()) {
if(openClosePair.containsKey(ch)) {
if(stack.isEmpty() || stack.pop() != openClosePair.get(ch)) {
return false;
}
} else if(openClosePair.values().contains(ch)) {
stack.push(ch);
}
}
return stack.isEmpty();
}