我们经常在各种IDE(集成开发环境)中敲代码。

现在的IDE非常智能,并会给出相应提示,还有及时的错误提醒。

其中有一项就是括号匹配的检测。

今天我们来谈一谈其中的原理。

先上图

图片发自简书App

再上代码

import java.io.BufferedReader;i

mport java.io.InputStreamReader;

import java.util.Scanner;

class Stack{

char [] data;int maxSize;//数组的长度int top;Scanner input=new Scanner(System.in);public Stack(int maxSize) {this.maxSize=maxSize;data=new char[maxSize];top=-1;

/*注意:因为数组下标是从0开始的,一开始top为-1就表示栈为空。*/

}

public int getSize()

{

return maxSize;

}

public int getElementCount()

{

//得到栈顶元素标号

return top;

}

public boolean isEmpty()

//判断是否为空栈 {

return top==-1;

}

public boolean isFull()

{

return top+1==maxSize;

//数组下标从0开始,所以这里top要先加1

}public boolean push(char data)

{

if(isFull()) {

System.out.println("栈已满");

return false;

}

this.data[++top]=data;/*这里的表达式(++top)的值是原来top+1 并且top的值从此已经加1,因为已经入栈了一次。* / return true;

}

public char pop() throws Exception

{if(isEmpty())

{

throw new Exception("栈已空");

}

return this.data[top--];/*这里(top--)的值仍然是原来top的值,并且从此top的值已经减1。因为已经弹栈了一次。*/

}public char peek()

{//查看当前栈顶元素return this.data[getElementCount()];

}

public void pipei() throws Exception {char ch,temp;

//定义输入的字符和接收弹出的字符变量int match;//是否匹配的标志BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));

ch=(char)reader.read();

while(ch!='0')

{

if(getElementCount()==-1)

{

push(ch);

}else {

temp=pop();//取出栈顶元素

match=0;

if(temp=='('&&ch==')')

{

match=1;

}

if(temp=='')

{match=1;}

if(temp=='{'&&ch=='}')

{match=1;}

if(temp=='['&&ch==']')

{match=1;}

if(match==0)

{push(temp);push(ch);}

/*注意,如果match为1,那么被取出的栈顶元素是不会被重新入栈的。*/

}

ch=(char)reader.read();

}

if(getElementCount()==-1)

{

System.out.println("匹配!");

/*while循环结束后,判断栈是否为空,若为空说明每次取出栈顶的元素都与输入的括号相匹配 */}

else

{System.out.println("不匹配!");

}

}

}

public class bracketsMatchAlrogithm {/*这里为了简单,就直接在主函数中抛出异常,实际中不要这么做。* / public static void main(String[] args) throws Exception{String go;Scanner input=new Scanner(System.in);Scanner input2=new Scanner(System.in);System.out.println("请输入最大字符容量");Stack s=new Stack(input.nextInt());System.out.println("括号匹配");do {System.out.println("请输入一组括号组合,以0表示结束");s.pipei();System.out.println("继续?(y/n)");go=input.nextLine();}while(go.equalsIgnoreCase("y"));System.out.println("游戏结束");input.close();input2.close();}}

以上内容是本人学习之后的总结,注释和画图均为本人所做,画图技术不好。。。难免粗糙,体谅一下,嘿嘿。

另外,本人水平有限,难免有缺漏和不足,望各位大侠指出啊!thankyou very much

java中括号的匹配_java括号匹配算法相关推荐

  1. java 字符串模糊匹配_Java实现伪查询(全匹配+模糊匹配)

    Java实现伪查询(全匹配+模糊匹配) 在项目中一直习惯了框架下[springboot+mybatis]的增删改查,然后领导突然给了一个需求,让我先弄一些假数据出来,用于页面的展示,业务啥的也没说,咱 ...

  2. java正则匹配_JAVA正则表达式匹配括号

    JAVA的正则表达式目前还不支持平衡组,要实现匹配括号只有定制深度. 其原理就是不断循环匹配括号里的内容和括号后面的内容(\\([^\\(\\)]*\\)[^\\(\\)]*)* 例子: //匹配二级 ...

  3. java 正则 小括号_java正则表达式匹配小括号内的内容

    正则表达式用来指定字符串模式.当你需要定位匹配某种模式的字符串时就可以使用正则表达式.例如,我们下面的一个例程就是在一个HTML文件中通过查找字符串模式来定位所有的超链接.     当然,为了指定一种 ...

  4. java 正则 任意字符_Java正则表达式 去掉括号内任意字符

    前言: 刚开始以为 (.*) 就是括号内任意字符了,试了不行. 错误点 1.括号需要转义(是正则表达式关键字) 2.不是任意字符,而是 除了右括号的任意字符 String content = &quo ...

  5. java中字符串的精确匹配_Java最佳实践–字符串性能和精确字符串匹配

    java中字符串的精确匹配 在使用Java编程语言时,我们将继续讨论与建议的实践有关的系列文章,我们将讨论String性能调优. 我们将专注于如何有效地处理字符串创建, 字符串更改和字符串匹配操作. ...

  6. 括号匹配编码c语言,用c语言实现括号匹配算法

    /*括号匹配算法*/ #include #define FALSE 0 #define TRUE 1 #define MAXSIZE 100 typedef char DataType; //定义栈 ...

  7. java正则表达式从后往前匹配_Java 正则表达式 向前、向后匹配

    //向后匹配 String a = "I paid $90 for 10 oranges, 12 pears and 8 apples. I saved $5 on "; Patt ...

  8. java正则表达式匹配小括号内的内容

    经常用到正则匹配小括号内容,在此摘录下来 String content = "src: local('Open Sans Light'), local('OpenSans-Light'), ...

  9. 括号匹配算法 java_括号匹配算法

    括号匹配算法 题目来自网络搜集和常考算法,如有侵权请联系我 题目描述 给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列 括号必须以正确的 ...

  10. shell中的括号(小括号,中括号,大括号/花括号)

    一.小括号,园括号() 1.单小括号 () ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有分号, ...

最新文章

  1. 修改或隐藏Nginx的版本号
  2. matlab中repmat的用法,Matlab: sum的用法、每一行求和、repmat的用法、sum和repmat结合使用减少循环...
  3. matlab R2014a添加路径
  4. 在流程梳理的过程中,OA工作组应采用国际先进方法
  5. 三十八、学Sql,不了解Sql注入怎么行?
  6. ScrollView内嵌ListView或GridView的滑动处理
  7. 第三课 Makefile文件的制作(上)
  8. CountDownLatch,CyclicBarrier和Semaphore
  9. 循环神经网络LSTM RNN回归:sin曲线预测
  10. spss方差分析_交叉设计及SPSS多因素方差分析
  11. 0113——代理模式
  12. 小菜鸟一步步打造图书馆外挂之十三:用户编辑界面的实现
  13. 《Redis官方教程》-Redis安全
  14. poj 1860 bellman 求正环
  15. Carla自动驾驶强化学习
  16. 如何理解总体标准差、样本标准差与标准误
  17. Python求离散序列导数
  18. HCIE - Routing Switching v3.0 Outline
  19. HTML5Canvas实现简易画图工具(铅笔,直线,矩形,圆,文本框,橡皮擦等)
  20. 【已解决】单个程序图标变白色怎么办?

热门文章

  1. 冯诺依曼计算机设备,科学网—计算机学习漫谈(10)——一台冯·诺依曼机器 - 陈钊的博文...
  2. 1. 什么是字符串(str)
  3. 科学计算机弧度,科学计算器角度换算(学生计算器怎么算角度)
  4. word单独编辑或者删除某一页的页眉
  5. Navicat连接本地数据库10038,1251
  6. 备战9月,美团50道软件测试经典面试题及答案汇总
  7. 净推荐值(NPS)完整行动指南
  8. [FOI2020]楼房搭建
  9. 华为又又又白给了,自动化福利领取了吗?
  10. Tableau计算同比和环比任意天数据