案例--检验表达式中的括号是否成对出现

Posted 北京小辉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了案例--检验表达式中的括号是否成对出现相关的知识,希望对你有一定的参考价值。

  /**
    * 检验表达式中的括号是否成对出现
    */
  def isMatch(rules: String): Boolean = 

    // 括号中文转英文字符
    val str = rules.replaceAll("(", "(").replaceAll(")", ")")

    // 设置栈存储容器
    val brackets = new util.HashMap[Character, Character]
    // key值为:')' ,value值为:'('
    brackets.put(')', '(')

    if (str == null) return false
    // 定一个装载字符的栈集合
    val stack = new util.Stack[Character]
    // 将字符中转为 char 类型数组
    val array: Array[Char] = str.toCharArray
    // char 类型数组从开始到结束遍历
    for (i <- array.indices) 

      val ch: Char = array(i)
      // 字符为:'(',则压栈
      if (brackets.containsValue(ch)) stack.push(ch)
      // 字符为:')',则弹栈
      else if (brackets.containsKey(ch))
        if (stack.empty || (stack.pop() != brackets.get(ch)))
      // 如果没有包括 ')''('  就跳出
          return false
    
    stack.isEmpty
  


  def main(args: Array[String]): Unit = 

    val str = "((T1 || T2) && (cc || dd))"
    val strMatch = isMatch(str)
    // 字符串转为字符
    println(str.toCharArray.mkString("Array(", ", ", ")"))
    println(strMatch)  //tgr

    val str01 = ""((T1 && T2) || T3)  && ((T4 || T5) && (T6 || T7))""
    val strMatch01 = isMatch(str01)
    println(strMatch01)
  
Array((, (, T, 1,  , |, |,  , T, 2, ),  , &, &,  , (, c, c,  , |, |,  , d, d, ), ))
true
true

以上是关于案例--检验表达式中的括号是否成对出现的主要内容,如果未能解决你的问题,请参考以下文章

案例--检验表达式中的括号是否成对出现

用栈实现括号匹配的检验

判断字符串中的括号是否成对出现

设计一个判别表达式中左、右括号是不是配对出现的算法,采用啥数据结构最佳。

1354括弧匹配检验

括弧匹配检验(check.cpp)