java学习之—栈匹配字符串符号
/**
* 栈
* Create by Administrator
* 2018/6/11 0011
* 上午 10:20
**/
public class StackR { private int maxSixe; private char[] stackArray; private int top; public StackR(int s) {
this.maxSixe = s;
this.stackArray = new char[maxSixe];
this.top = -1;
} /**
* 入栈
* @param j
*/
public boolean push(char j){
if(isFull()){
System.out.println("栈已满");
return false;
}else{
this.stackArray[++top] = j;
return true;
}
} /**
* 出栈
*/
public char pop(){
return stackArray[top--];
} /**
* 查看
* @return
*/
public void peek(){
System.out.println(stackArray[top]);
} /**
* 判断栈是否为空
* @return
*/
public boolean isEmpty(){
return (top == -1);
} /**
* 判断栈是否满了
* @return
*/
public boolean isFull(){
return (top == maxSixe-1);
}
}
public class BracketChecher {
private String input;
public BracketChecher(String input) {
this.input = input;
}
public void check(){
int stackSize = input.length();
StackR stackR = new StackR(stackSize);
for (int i = 0; i < stackSize; i++) {
char ch = input.charAt(i);
switch (ch){
case '{':
case '[':
case '(':
stackR.push(ch);
break;
case '}':
case ']':
case ')':
if(!stackR.isEmpty()){
char chx = stackR.pop();
if(ch == '}' && chx != '{' || ch == ']' && chx != '[' || ch == ')' && chx != '('){
System.out.println("Error:"+ch+" at "+i);
}
}else{
System.out.println("Error:"+ch+" at "+i);
}
default:
break;
}
}
if(!stackR.isEmpty()){
System.out.println("Error: missing right delimiter");
}
}
public static String getString() throws IOException{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String s = br.readLine();
return s;
}
public static void main(String[] args) throws IOException {
while(true){
System.out.flush();
String input = getString();
BracketChecher b = new BracketChecher(input);
b.check();
}
}
测试控制台输入字符串:a{b(c]d}
结果:Error:] at 3
java学习之—栈匹配字符串符号的更多相关文章
- js 正则学习小记之匹配字符串
原文:js 正则学习小记之匹配字符串 今天看了第5章几个例子,有点收获,记录下来当作回顾也当作分享. 关于匹配字符串问题,有很多种类型,今天讨论 js 代码里的字符串匹配.(因为我想学完之后写个语法高 ...
- js 正则学习小记之匹配字符串优化篇
原文:js 正则学习小记之匹配字符串优化篇 昨天在<js 正则学习小记之匹配字符串>谈到 个字符,除了第一个 个,只有 个转义( 个字符),所以 次,只有 次成功.这 次匹配失败,需要回溯 ...
- js 正则学习小记之匹配字符串字面量优化篇
昨天在<js 正则学习小记之匹配字符串字面量>谈到 个字符,除了第一个 个,只有 个转义( 个字符),所以 次,只有 次成功.这 次匹配失败,需要回溯后用 [^"] 才能匹配成功 ...
- 解决java switch……case不能匹配字符串的问题
java1.7已经支持了匹配字符串 方案1. enum Animal { dog,cat,bear; public static Animal getAnimal(String animal){ re ...
- Java学习之栈和堆的区别
在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配. 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配 ...
- js 正则学习小记之匹配字符串字面量
今天看了第5章几个例子,有点收获,记录下来当作回顾也当作分享. 关于匹配字符串问题,有很多种类型,今天讨论 js 代码里的字符串匹配.(因为我想学完之后写个语法高亮练手,所以用js代码当作例子) va ...
- java中使用正则表达式匹配字符串
在Java中使用正则表达式去匹配相应的字符串: String importFileRole = "(import)\\s*[a-zA-Z0-9_<>.]+\\;";// ...
- java学习,从一个字符串中统计同一类型出现的次数
1.从字符串“AS345asdzf*())sddsWE”中统计大写字母.小写字母.其他类型的出现的次数 String s="AS345asdzf*())sddsWE"; int l ...
- java学习之—栈
/** * 栈 * Create by Administrator * 2018/6/11 0011 * 上午 10:20 **/ public class StackX { private int ...
随机推荐
- Grid布局指南
简介 CSS网格布局(又称“网格”),是一种二维网格布局系统.CSS在处理网页布局方面一直做的不是很好.一开始我们用的是table(表格)布局,然后用float(浮动),position(定位)和in ...
- 003_Git & Gitlab 使用指南
2016-02-23 | 9,129字 | 分类于 工具 | 3条评论 去年小组在从 SVN 和 TFS 迁移到 Git 的过程中整理了这份文档,面向的用户是对 Git 和 SV ...
- CRF 条件随机场工具包
CRF - 条件随机场 工具包(python/c++) 项目案例 ConvCRF+FullCRF https://github.com/MarvinTeichmann/ConvCRF 需要的包Opti ...
- djongo:Django和MongoDB连接器
在Django项目中使用MongoDB作为后端数据库,且不改变Django的ORM框架.实现Django用户管理程序对MongoDB数据库中文件的增加和修改. 用法 1.pip install djo ...
- Jenkins集成openshift容器中进行代码扫描
1.Dockerfile sonarDockerfile: (基础slave镜像参考上篇博文) FROM registry.it.com/openshift/jenkins-slave:latest ...
- java单例模式总结
目录 一. 饿汉模式(静态初始化) 二.双重检查锁(dcl) 三. 延迟占位类 四.枚举实现 最后 常见安全的单例实现代码和自己的一点理解. 一. 饿汉模式(静态初始化) class Singleto ...
- 开发手记:JedisConnectionException: Could not get a resource from the pool
对于Redis,生产环境是集群模式,测试环境是单例模式,如果在生产环境中用单例模式会报错. 解决办法,通过云配置,将配置进行自动化配置. 另附一份Redis配置: #***************** ...
- Winform开发框架中的综合案例Demo
在实际的系统开发中,我们往往需要一些简单的的案例代码,基于此目的我把Winform开发框架中各种闪光点和不错的功能,有些是我们对功能模块的简单封装,而有些则是引入了一些应用广泛的开源组件进行集成使用, ...
- JavaScript技巧总结和本地存储(二)
离线检测 检测是否离线,html5为此定义了一个navigator.onLine属性,这个属性为true表示设备能上网,false表示离线,这个属性还有点兼容问题.因此单独使用这个属性不能确定网络是否 ...
- JenKins自动化构建部署流程参考
Jenkins工作流程 程序员提交代码到Git/SVN仓库,触发钩子程序向 JenKins 进行通知,Jenkins 调用Git/SVN插件获取源码,调用Maven打包为war包,调用Deploy t ...