21xrx.com
2024-11-08 22:12:57 Friday
登录
文章检索 我的文章 写文章
Java实现有效的括号检验方法
2023-06-14 21:58:43 深夜i     --     --
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实现方法,可用于检验括号匹配的问题。第一种方法使用栈实现,第二种方法使用正则表达式实现,第三种方法则是使用栈和映射表实现。在实际编程中,可根据具体需求选择适合的方法进行实现。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复