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