java中的括号检查器

时间:2014-11-04 09:57:17

标签: java stack parentheses

我在java中创建了一个括号检查程序,它从标准输入读入文本流并使用堆栈来确定其括号是否正确平衡。例如,它应该为[()]{}{[()()]()}打印为true,为[(])打印为false。我为这个问题制作了自己的堆栈类:

public class Stack {
private char items[];
private int top;

Stack(int n){
    items = new char[n];
    top = -1; 
}

void push(char c){
    if(top == items.length-1){
        System.out.println("Stack full.");
        return;
    }
    top++;
    items[top] = c;
}

char pop(){
    if(isEmpty()){
        System.out.println("Stack empty");
        return (char)0;
    }
    char p;
    p = items[top];
    top--;
    return p;
}

boolean isEmpty(){
    if(top == -1)
        return true;
    else    
        return false;
}

}

下面的checkValid方法接受一个String输入,如果括号匹配则返回true,如果它们不匹配则返回false。

    public static Boolean checkValid(String str){
        char sym,prev;
        Stack s = new Stack(str.length());
        for(int i=0; i<str.length();i++){
            sym = str.charAt(i);
            if(sym == '(' || sym=='{' || sym=='['){
                s.push(sym);
            }
            if(sym == ')' || sym=='}' || sym==']'){
               if(s.isEmpty()){
                   return false;
                }
               else{
                    prev = s.pop();
                    if(!isPairMatch(prev,sym))
                        return false;
               }
            }

        }
        if(!s.isEmpty())
            return false;
        return true;
    }
    public static boolean isPairMatch(char character1, char character2){
        if(character1 == '(' && character2 == ')')
            return true;
        else if(character1 == '{' && character2 == '}')
            return true;
        else if(character1 == '[' && character2 == ']')
            return true;
        else
            return false;
    }
}

有没有办法打印不匹配括号的位置?

1 个答案:

答案 0 :(得分:1)

如果你的Stack不是持有chars,而是持有一个包含输入String中charchar的索引的类,你将能够打印不匹配括号的索引。

编辑:

仅当您希望两个不匹配的括号的索引未通过isPairMatch测试时,才需要此解决方案。

例如,如果您有字符串“[{} {} {})”,则不匹配的对是第一个“[”和最后一个“)”,其索引为0和7。

如果您只需要第一个不匹配的括号的索引(即第一个“[”,其索引为0),您只需在删除该括号后检查堆栈的大小。在此示例中,当检查最后一对时,堆栈将为空,因此堆栈的大小将为0,这是失败的isPairMatch测试的第一个char的索引。