java如何匹配括号

匹配括号的方法
在Java中,可以使用栈(Stack)数据结构来检查字符串中的括号是否匹配。栈的特点是后进先出(LIFO),适合用于检查括号的嵌套关系。

使用栈实现括号匹配
import java.util.Stack;
public class BracketMatcher {
public static boolean isBalanced(String expression) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < expression.length(); i++) {
char ch = expression.charAt(i);
if (ch == '(' || ch == '[' || ch == '{') {
stack.push(ch);
} else if (ch == ')' || ch == ']' || ch == '}') {
if (stack.isEmpty()) {
return false;
}
char top = stack.pop();
if (!isMatchingPair(top, ch)) {
return false;
}
}
}
return stack.isEmpty();
}
private static boolean isMatchingPair(char opening, char closing) {
return (opening == '(' && closing == ')') ||
(opening == '[' && closing == ']') ||
(opening == '{' && closing == '}');
}
public static void main(String[] args) {
String test1 = "{[()]}";
String test2 = "{[(])}";
System.out.println(isBalanced(test1)); // true
System.out.println(isBalanced(test2)); // false
}
}
使用正则表达式匹配简单括号
对于简单的括号匹配(如仅包含一种类型的括号),可以使用正则表达式结合循环来检查:
import java.util.regex.Pattern;
public class SimpleBracketMatcher {
public static boolean isBalanced(String expression) {
String regex = "\\(\\)";
String current = expression;
while (Pattern.compile(regex).matcher(current).find()) {
current = current.replaceAll(regex, "");
}
return current.isEmpty();
}
public static void main(String[] args) {
String test1 = "()()";
String test2 = "(()";
System.out.println(isBalanced(test1)); // true
System.out.println(isBalanced(test2)); // false
}
}
注意事项
- 栈方法适用于多种括号类型(如圆括号、方括号、花括号),并能处理嵌套关系。
- 正则表达式方法仅适用于单一类型的括号,且无法处理复杂嵌套场景。
- 实际应用中,栈方法更通用且可靠。






