java - java中的括号检查器

标签 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 方法接受一个字符串输入,如果括号匹配则返回 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;
    }
}

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

最佳答案

如果您的堆栈不是保存 chars,而是保存一个类,该类同时包含 char 以及该 char 在输入字符串,您将能够打印不匹配括号的索引。

编辑:

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

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

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

关于java - java中的括号检查器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26732217/

相关文章:

java - Oracle JDBC 刷新共享池不工作

java - 从 Java hibernate Windows

java - 使用 java 解析 xml 字符串和修剪特定标签空间的最佳方法

c++ - 将二维数组插入 C++ STL 堆栈?

java 用括号打印有序 BST

java - 如何用 Java 编写正确的微基准测试?

stack - 堆栈和队列之间的基本区别是什么?

linux - linux gcc/clang 是否生成调试代码来检查堆栈平衡?

binary-tree - 在 Coq 中定义 Unlambda 风格的树表示法

javascript - JavaScript 中圆括号的语法规则