/**
* 栈
* 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