在编写程序的过程中,我们经常会遇到诸如圆括号“()”与花括号“{}”,这些符号都必须是左右匹配的,这就是我们所说的符合匹配类型,当然符合不仅需要个数相等,而且需要先左后右的依次出现,否则就不符合匹配规则,如“)(”,明显是错误的匹配,而“()”才是正确的匹配。有时候符合如括号还会嵌套出现,如“9-(5+(5+1))”,而嵌套的匹配原则是一个右括号与其前面最近的一个括号匹配,事实上编译器帮我检查语法错误是也是执行一样的匹配原理,而这一系列操作都需要借助栈来完成,接下来我们使用栈来实现括号”()”是否匹配的检测。
判断原则如下(str=”((5-3)*8-2)”):
1.设置str是一个表达式字符串,从左到右依次对字符串str中的每个字符char进行语法检测,如果char是左括号则入栈,如果char是右括号则出栈(有一对匹配就可以去匹配一个左括号,因此可以出栈),若此时出栈的字符char为左括号,则说明这一对括号匹配正常,如果此时栈为空或者出栈字符不为左括号,则表示缺少与char匹配的左括号,即目前不完整。
2.重复执行a操作,直到str检测结束,如果此时栈为空,则全部括号匹配,如果栈中还有左括号,是说明缺少右括号。
public static void main(String[] args) { String str="((5-3)*8-2)"; Stack<String> stack = new Stack<>(); boolean flag=true; for(int i=0;i<str.length();i++) { char ch=str.charAt(i); if(ch=='(') { //左括号入栈 stack.push(ch+""); } else if(ch==')') { if(stack.isEmpty()||!stack.pop().equals("(")) flag=false; } } if(flag&&stack.isEmpty()) { System.out.println("检查通过"); } else { System.out.println("检查失败"); } }
0条评论
点击登录参与评论