21xrx.com
2025-03-24 13:20:12 Monday
文章检索 我的文章 写文章
Java实现有效的括号检验方法
2023-06-14 21:58:43 深夜i     16     0
Java 括号匹配 正则表达式 映射表

在编写Java程序时,经常会遇到对括号进行检验的需求,比如检验一个数学表达式中的括号是否合法。本文将介绍一种简单而有效的括号检验方法,供Java程序员们参考。

1.使用栈进行括号检验

本方法的核心思想是使用栈来存储左括号,并在遇到右括号时进行匹配。具体操作如下:

1)遍历输入的字符串,当遇到左括号时,将其入栈。

2)当遇到右括号时,判断栈是否为空,若为空则说明该括号无法匹配;若不为空,则从栈顶取出左括号进行匹配。

3)如果左右括号匹配成功,则继续遍历后面的字符;如果匹配失败,则直接返回false。

4)遍历完字符串后,如果栈为空,则说明所有括号都匹配成功,返回true;否则返回false。

下面是Java代码实现:

public static boolean isValid(String s) {
  Stack
  stack = new Stack<>();
 
  for (char c : s.toCharArray()) {
    if (c == '(' || c == '[' || c == '{') {
      stack.push(c);
    } else {
      if (stack.isEmpty())
        return false;
      
      char left = stack.pop();
      if (c == ')' && left != '(')
        return false;
      
      if (c == ']' && left != '[')
        return false;
      
      if (c == '}' && left != '{')
        return false;
      
    }
  }
  return stack.isEmpty();
}

2.使用正则表达式进行括号检验

除了使用栈进行括号检验,还可以使用正则表达式进行匹配。具体思路是:

1)定义一个正则表达式,用来匹配所有的括号字符。

2)使用Java的String类中的replaceAll方法,将所有匹配的括号字符替换成空字符串。

3)如果替换后的字符串长度为0,则说明所有括号都匹配成功,返回true;否则返回false。

下面是Java代码实现:

public static boolean isValid(String s) {
  String regex = "\\(\\)|\\[\\]|\\{\\}";
  while (s.matches(".*" + regex + ".*")) {
    s = s.replaceAll(regex, "");
  }
  return s.length() == 0;
}

3.使用栈和映射表进行括号检验

除了上面两种方法,还可以使用栈和映射表进行括号检验。具体思路是:

1)定义一个映射表,用来存储每种左右括号的对应关系。

2)遍历输入的字符串,当遇到左括号时,将其入栈;当遇到右括号时,判断栈顶元素与该右括号是否匹配。

3)如果匹配成功,则弹出栈顶元素;否则直接返回false。

4)遍历结束后,如果栈为空,则说明所有括号都匹配成功,返回true;否则返回false。

下面是Java代码实现:

public static boolean isValid(String s) {
  Stack
  stack = new Stack<>();
 
  Map
  map = new HashMap<>();
 
  map.put(')', '(');
  map.put(']', '[');
  map.put('}', '{');
  for (char c : s.toCharArray()) {
    if (map.containsKey(c)) {
      if (stack.isEmpty() || stack.peek() != map.get(c)) {
        return false;
      }
      stack.pop();
    } else {
      stack.push(c);
    }
  }
  return stack.isEmpty();
}

总结:

本文介绍了三种不同的Java实现方法,可用于检验括号匹配的问题。第一种方法使用栈实现,第二种方法使用正则表达式实现,第三种方法则是使用栈和映射表实现。在实际编程中,可根据具体需求选择适合的方法进行实现。

  
  

评论区

请求出错了