java版 利用栈实现括号匹配

来源:互联网 发布:淘宝七乐康药店 假货 编辑:程序博客网 时间:2024/06/07 10:08
package MatchKuoHao;


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;
}
}


0 0