java实现括号匹配
2015-11-17 14:17
453 查看
// brackets.java // stacks used to check matching brackets // to run this program: C>java bracketsApp import java.io.*; // for I/O //////////////////////////////////////////////////////////////// class StackX { private int maxSize; private char[] stackArray; private int top; //-------------------------------------------------------------- public StackX(int s) // constructor { maxSize = s; stackArray = new char[maxSize]; top = -1; } //-------------------------------------------------------------- public void push(char j) // put item on top of stack { stackArray[++top] = j; } //-------------------------------------------------------------- public char pop() // take item from top of stack { return stackArray[top--]; } //-------------------------------------------------------------- public char peek() // peek at top of stack { return stackArray[top]; } //-------------------------------------------------------------- public boolean isEmpty() // true if stack is empty { return (top == -1); } //-------------------------------------------------------------- } // end class StackX //////////////////////////////////////////////////////////////// class BracketChecker { private String input; // input string //-------------------------------------------------------------- public BracketChecker(String in) // constructor { input = in; } //-------------------------------------------------------------- public void check() { int stackSize = input.length(); // get max stack size StackX theStack = new StackX(stackSize); // make stack for(int j=0; j<input.length(); j++) // get chars in turn { char ch = input.charAt(j); // get char switch(ch) { case '{': // opening symbols case '[': case '(': theStack.push(ch); // push them break; case '}': // closing symbols case ']': case ')': if( !theStack.isEmpty() ) // if stack not empty, { char chx = theStack.pop(); // pop and check if( (ch=='}' && chx!='{') || (ch==']' && chx!='[') || (ch==')' && chx!='(') ) System.out.println("Error: "+ch+" at "+j); } else // prematurely empty System.out.println("Error: "+ch+" at "+j); break; default: // no action on other characters break; } // end switch } // end for // at this point, all characters have been processed if( !theStack.isEmpty() ) System.out.println("Error: missing right delimiter"); } // end check() //-------------------------------------------------------------- } // end class BracketChecker //////////////////////////////////////////////////////////////// class BracketsApp { public static void main(String[] args) throws IOException { String input; while(true) { System.out.print( "Enter string containing delimiters: "); System.out.flush(); input = getString(); // read a string from kbd if( input.equals("") ) // quit if [Enter] break; // make a BracketChecker BracketChecker theChecker = new BracketChecker(input); theChecker.check(); // check brackets } // end while } // end main() //-------------------------------------------------------------- public static String getString() throws IOException { InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); String s = br.readLine(); return s; } //-------------------------------------------------------------- } // end class BracketsApp ////////////////////////////////////////////////////////////////
相关文章推荐
- 使用Eclipse for J2EE 开发Web程序
- java调用R 画词云
- 深入理解Java:SimpleDateFormat安全的时间格式化
- Java JDBC连接数据库 Access连接数据库
- SpringMVC学习系列(1) 之 初识SpringMVC
- JAVA 实现 IMEI校验码算法
- java中字符流的总结
- eclipse的svn连接不上 request failed
- java数字图像处理基础使用imageio写图像文件示例(转载)
- 尝试编写的rabbitmq+spring 框架
- Java发送邮件(带附件)
- myeclipse 编辑java中的变量时,高亮显示
- spring中bean的创建
- springMvc 前台ajax传入时间请求报400错误
- spring-test结合junit4
- JAVA字符串格式化-String.format()的使用
- Java操作hbase CURD
- Java泛型中的通配符
- 利用反射机制创建新类的两种方式及比较
- spring prototype怎么注入到singleton 里面