Java判断括号()[]{}是否成对出现

思路:通过JDK自己封装的数据结构 实现。
代码如下:

import org.apache.commons.lang.StringUtils;

import java.util.*;

/**
 * 括号表达式校验工具类
 * @author 2020/10/24
 */
public class ParenUtil {
    /**
     * 映射右括号和左括号
     */
    private final static Map<Character, Character> PAREN_DICT_MAP = new HashMap<>(4);
    /**
     * 所有的左括号放在一个集合中
     */
    private final static Set<Character> LEFT_PAREN_SET;

    static {
        PAREN_DICT_MAP.put(')', '(');
        PAREN_DICT_MAP.put(']', '[');
        PAREN_DICT_MAP.put('}', '{');
        LEFT_PAREN_SET = new HashSet<>(PAREN_DICT_MAP.values());
    }

    /**
     * 判断表达式 括号使用是否正确
     *
     * @param expression 表达式
     * @return boolean
     */
    public static boolean isCorrectExpressionParen(String expression) {
        if (StringUtils.isBlank(expression)){
            return false;
        }
        Stack<Character> stack = new Stack<>();
        char[] chars = expression.toCharArray();
        for (char c : chars) {
            if (LEFT_PAREN_SET.contains(c)) {
                //如果是左括号,直接入栈
                stack.push(c);
                continue;
            }
            //如果是右括号,则弹出栈顶的左括号进行比较,看是否是一对
            if (PAREN_DICT_MAP.containsKey(c)) {
                if (stack.isEmpty() || !stack.pop().equals(PAREN_DICT_MAP.get(c))) {
                    return false;
                }
            }
        }
        //如果最后栈不为空,说明表达式也不正确
        return stack.isEmpty();
    }

    public static void main(String[] args) {
        System.out.println("null:" + isCorrectExpressionParen(null));
        System.out.println(":" + isCorrectExpressionParen(""));
        System.out.println("((:" + isCorrectExpressionParen("(("));
        System.out.println(")):" + isCorrectExpressionParen("))"));
        System.out.println("():" + isCorrectExpressionParen("()"));
        System.out.println("()):" + isCorrectExpressionParen("())"));
        System.out.println("(():" + isCorrectExpressionParen("(()"));
        System.out.println("(()):" + isCorrectExpressionParen("(())"));
        System.out.println("((():" + isCorrectExpressionParen("((()"));
        System.out.println("())):" + isCorrectExpressionParen("()))"));
        System.out.println("()[]{}:" + isCorrectExpressionParen("()[]{}"));
        System.out.println("([)]{}:" + isCorrectExpressionParen("([)]{}"));
        System.out.println(")(:" + isCorrectExpressionParen(")("));
        System.out.println("{[][()]}:" + isCorrectExpressionParen("{[][()]}"));
    }

测试结果:
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值