java版 利用栈实现括号匹配
来源:互联网 发布:淘宝七乐康药店 假货 编辑:程序博客网 时间:2024/06/07 10:08
public class StackX {
//底层采用数据来存储数据,
private char[] stackArray;
private int maxSize;
private int top;
public StackX(int max){
this.maxSize = max;
stackArray = new char[maxSize];
top = -1;
}
//存储数据
public void push(char ch){
stackArray[++top] = ch;
}
//取出数据
public char pop(){
return stackArray[top--];
}
//查看数据
public char peek(){
return stackArray[top];
}
//查看当前是否为空栈
public boolean isEmpty(){
return top == -1;
}
}
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
package MatchKuoHao;
/*
* 括号匹配,利用栈来实现
*/
public class BracketChecker {
private String input;
public BracketChecker(String input){
this.input = input;
}
public void check(){
int stackSize = input.length();
StackX theStack = new StackX(stackSize);
//a{b(c[j])}
/*
* 目前,如果读到{}()[]就放到栈里,进行check
*/
for(int i=0;i<stackSize;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);
}else{
//走这个分支,说明,栈里,没有内容了,
System.out.println("error:"+ch+"at:left"+i);//栈里,已经没有匹配括号了
//但是,又读到括号了,说明,要么前面少了,要么就是后面多了
}
break;
default:
break;
}
}
//当已经读完字符串后,检测一下栈,看看,里面是否还有元素,有的话,说明,左边,缺少
if(!theStack.isEmpty())
System.out.println("error:"+"right 缺少匹配括号哦");
}
}
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
package MatchKuoHao;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BracketCheckTest {
public static void main(String[] args) throws IOException {
String input;
while(true){
System.out.println("Enter a String containing delimiters:");
System.out.flush();
input = getString();
if(input.equals("")) break; //”“输入回车就可以结束循环了
BracketChecker theChecker = new BracketChecker(input);
theChecker.check();
}
}
//获得,控制台的输入的字符串
public static String getString() throws IOException{
//inputStreamReader 输入流的读取器,也就是控制台的
InputStreamReader isr = new InputStreamReader(System.in);
//InputStreamReader 还不是很好,需要再包装一次哦
//BufferedReader 带缓存的读取器哦
BufferedReader bReader = new BufferedReader(isr);
String s = bReader.readLine();
return s;
}
}
- java版 利用栈实现括号匹配
- java利用栈实现括号()[]匹配问题
- java栈实现括号匹配
- 利用栈实现括号匹配算法!
- 利用栈实现括号匹配算法
- 利用栈实现括号匹配算法!
- 利用STL栈实现括号匹配算法
- 利用栈实现括号匹配检测
- 利用顺序栈实现括号匹配
- java实现括号匹配
- Java实现括号匹配
- java实现括号匹配
- 括号匹配Java实现
- 使用栈实现括号匹配算法-java
- 栈实现括号匹配
- 栈实现括号匹配
- 栈实现括号匹配
- 栈实现括号匹配
- c++primer之顺序容器(容器库概览)
- apache开启虚拟主机方法
- hdu2896-ac自动机
- [网络流24题] 21 最长k可重区间集(最大权不相交路径 ,最小费用最大流)
- C语言排序实例(选择、冒泡、插入、折半、快速)
- java版 利用栈实现括号匹配
- CCF-最大的矩形-201312-3
- linux下sed和awk命令使用入门
- Java中Runnable和Thread的区别
- 白化
- 编码解码模型和实现
- USACO 1.3 Prime Cryptarithm
- ABAP 保存SAP系统中全部自开发程序的程序一个
- HDU 5412 CRB and Queries 求区间第k小 CDQ分治+整体二分