【第4节】Java代码实现栈--小例子--分隔符匹配
2015-10-10 20:07
435 查看
package com.java.chapterFour; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class BracktStackApp { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { // TODO Auto-generated method stub String input; while(true){ System.out.println("请出入遗传字符串"); System.out.flush(); input =getString(); if(input.equals("")) break; BreaketChecker theChecker=new BreaketChecker(input); theChecker.check(); } } public static String getString() throws IOException{ InputStreamReader isr=new InputStreamReader(System.in); BufferedReader br=new BufferedReader(isr); String s=br.readLine(); return s; } } class BracktStack{ private int maxSize; private char[] stackArray; private int top; BracktStack(int n){ stackArray=new char ; maxSize=n; top=-1; } public void push(char j){ stackArray[++top]=j; } public char pop(){ return stackArray[top--]; } public char peek(){ return stackArray[top]; } public boolean isEmpty(){ return (top==-1); } public boolean isFull(){ return (top==maxSize-1); } } class BreaketChecker{ private String input; public BreaketChecker(String in){ input=in; } public void check(){ int stackSize=input.length(); BracktStack theStack=new BracktStack(stackSize); for (int i = 0; i < input.length(); i++) { char ch=input.charAt(i); switch(ch){ case '{' : case '[' : case '(' : theStack.push(ch); break; case '}': case ']': case ')': if(!theStack.isEmpty()) { char chx=theStack.pop(); //先前输入的数据,然后弹出 if( (ch=='}'&&chx!='{') || (ch==']'&&chx!='[') || (ch==')'&&chx!='(') ) System.out.println("Error: "+ch+"at "+(i+1)+" 括号不匹配"); else if( (ch=='}'&&chx=='{') || (ch==']'&&chx=='[') || (ch==')'&&chx=='(') ) System.out.println("匹配成功"); }else System.out.println("Error: "+ch+" at "+(i+1)+" 栈是空的"); break; default: break; }//end switch }//end for if(!theStack.isEmpty()) System.out.println("Rrror: 没有正确的分解符,已经有前括号,没有后括号"); } }
相关文章推荐
- 【第4节】Java代码实现栈--小例子--单词逆序
- 【第4节】栈的Java代码实现,【数组形式存储】
- Java开发工具
- Java语言基础(数组概述和定义格式说明)
- Java语言基础(常量的概述和使用)
- [leetcode]Palindrome Linked List
- 静态页面和动态页面
- Java SE学问Random
- 配置Spring <context:annotation-config/>的作用
- Java Socket学习---nio实现阻塞多线程通信
- Java基础篇-集合
- Spring Boot实践应用开发(6)
- java动态代理(JDK和cglib)
- spring二级缓存的ehcache 的 配置文件
- Java设计模式——开篇
- java反射机制详解 及 Method.invoke解释
- Codeforces - 546C. Soldier and Cards- Java题解
- Java没有源代码的同步集合~
- Netbeans中的一些小知识
- spring transaction 注解方法报错Can not set field to proxy