java中括号的匹配_java括号匹配算法
我们经常在各种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括号匹配算法相关推荐
- java 字符串模糊匹配_Java实现伪查询(全匹配+模糊匹配)
Java实现伪查询(全匹配+模糊匹配) 在项目中一直习惯了框架下[springboot+mybatis]的增删改查,然后领导突然给了一个需求,让我先弄一些假数据出来,用于页面的展示,业务啥的也没说,咱 ...
- java正则匹配_JAVA正则表达式匹配括号
JAVA的正则表达式目前还不支持平衡组,要实现匹配括号只有定制深度. 其原理就是不断循环匹配括号里的内容和括号后面的内容(\\([^\\(\\)]*\\)[^\\(\\)]*)* 例子: //匹配二级 ...
- java 正则 小括号_java正则表达式匹配小括号内的内容
正则表达式用来指定字符串模式.当你需要定位匹配某种模式的字符串时就可以使用正则表达式.例如,我们下面的一个例程就是在一个HTML文件中通过查找字符串模式来定位所有的超链接. 当然,为了指定一种 ...
- java 正则 任意字符_Java正则表达式 去掉括号内任意字符
前言: 刚开始以为 (.*) 就是括号内任意字符了,试了不行. 错误点 1.括号需要转义(是正则表达式关键字) 2.不是任意字符,而是 除了右括号的任意字符 String content = &quo ...
- java中字符串的精确匹配_Java最佳实践–字符串性能和精确字符串匹配
java中字符串的精确匹配 在使用Java编程语言时,我们将继续讨论与建议的实践有关的系列文章,我们将讨论String性能调优. 我们将专注于如何有效地处理字符串创建, 字符串更改和字符串匹配操作. ...
- 括号匹配编码c语言,用c语言实现括号匹配算法
/*括号匹配算法*/ #include #define FALSE 0 #define TRUE 1 #define MAXSIZE 100 typedef char DataType; //定义栈 ...
- java正则表达式从后往前匹配_Java 正则表达式 向前、向后匹配
//向后匹配 String a = "I paid $90 for 10 oranges, 12 pears and 8 apples. I saved $5 on "; Patt ...
- java正则表达式匹配小括号内的内容
经常用到正则匹配小括号内容,在此摘录下来 String content = "src: local('Open Sans Light'), local('OpenSans-Light'), ...
- 括号匹配算法 java_括号匹配算法
括号匹配算法 题目来自网络搜集和常考算法,如有侵权请联系我 题目描述 给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列 括号必须以正确的 ...
- shell中的括号(小括号,中括号,大括号/花括号)
一.小括号,园括号() 1.单小括号 () ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有分号, ...
最新文章
- 修改或隐藏Nginx的版本号
- matlab中repmat的用法,Matlab: sum的用法、每一行求和、repmat的用法、sum和repmat结合使用减少循环...
- matlab R2014a添加路径
- 在流程梳理的过程中,OA工作组应采用国际先进方法
- 三十八、学Sql,不了解Sql注入怎么行?
- ScrollView内嵌ListView或GridView的滑动处理
- 第三课 Makefile文件的制作(上)
- CountDownLatch,CyclicBarrier和Semaphore
- 循环神经网络LSTM RNN回归:sin曲线预测
- spss方差分析_交叉设计及SPSS多因素方差分析
- 0113——代理模式
- 小菜鸟一步步打造图书馆外挂之十三:用户编辑界面的实现
- 《Redis官方教程》-Redis安全
- poj 1860 bellman 求正环
- Carla自动驾驶强化学习
- 如何理解总体标准差、样本标准差与标准误
- Python求离散序列导数
- HCIE - Routing Switching v3.0 Outline
- HTML5Canvas实现简易画图工具(铅笔,直线,矩形,圆,文本框,橡皮擦等)
- 【已解决】单个程序图标变白色怎么办?
热门文章
- 冯诺依曼计算机设备,科学网—计算机学习漫谈(10)——一台冯·诺依曼机器 - 陈钊的博文...
- 1. 什么是字符串(str)
- 科学计算机弧度,科学计算器角度换算(学生计算器怎么算角度)
- word单独编辑或者删除某一页的页眉
- Navicat连接本地数据库10038,1251
- 备战9月,美团50道软件测试经典面试题及答案汇总
- 净推荐值(NPS)完整行动指南
- [FOI2020]楼房搭建
- 华为又又又白给了,自动化福利领取了吗?
- Tableau计算同比和环比任意天数据