A+{[B*(C+D)-E*5*(F/(12-G))*(H+(I-5)*3)]} 编码验证括号是否匹配

解决方案 »

  1.   


    public static void main(String[] args) throws IOException {
    check("A+{[B*(C+D)-E*5*(F/(12-G))*(H+(I-5)*3)]}");
    // check("(a+b)+c");
    }

    static void check(String tar){
    Stack<String> stack = new Stack<String>();
    for(int i=0;i<tar.length();i++){
    String temp = Character.toString(tar.charAt(i));
    if(temp.matches("[\\{\\{\\(]")){
    stack.push(temp);
    }else if(temp.equals("}")){
    if(stack.isEmpty() || !stack.pop().equals("{")){
    System.err.println("不匹配的}在第"+(i+1)+"位");
    return;
    }
    }else if(temp.equals("]")){
    if(stack.isEmpty() || !stack.pop().equals("[")){
    System.err.println("不匹配的]在第"+(i+1)+"位");
    return;
    }
    }else if(temp.equals(")")){
    if(stack.isEmpty() || !stack.pop().equals("(")){
    System.err.println("不匹配的)在第"+(i+1)+"位");
    return;
    }
    }
    }
    if(stack.size()>0){
    System.err.println("不匹配");
    }
    }
      

  2.   

     if(temp.matches("[\\{\\{\\(]")){
    打错了.应该是 if(temp.matches("[\\{\\[\\(]")){
    刚发现的。sorry
      

  3.   


    public static void main(String[] args) throws IOException {
    check("A+{[B*(C+D)-E*5*(F/(12-G))*(H+(I-5)*3)]}");
    }

    static void check(String tar){
    //一般讲栈的算法里面的例题就是他.读到左括号就入栈,读到右括号就出栈判断是否正确的闭合括号
    //最后栈内为空表示正确.不空就表明还有未配对的左括号
    Stack<String> stack = new Stack<String>();
    for(int i=0;i<tar.length();i++){
    String temp = Character.toString(tar.charAt(i));
    if(temp.matches("[\\{\\[\\(]")){
    stack.push(temp);
    }else if(temp.equals("}")){
    if(stack.isEmpty() || !stack.pop().equals("{")){
    System.err.println("不匹配的}在第"+(i+1)+"位");
    return;
    }
    }else if(temp.equals("]")){
    if(stack.isEmpty() || !stack.pop().equals("[")){
    System.err.println("不匹配的]在第"+(i+1)+"位");
    return;
    }
    }else if(temp.equals(")")){
    if(stack.isEmpty() || !stack.pop().equals("(")){
    System.err.println("不匹配的)在第"+(i+1)+"位");
    return;
    }
    }
    }
    if(stack.size()>0){
    System.err.println("不匹配");
    }else{
    System.out.println("正确的");
    }
      

  4.   

    String str = "A+{[B*(C+D)-E*5*(F/(12-G))*(H+(I-5)*3)]}";
        char temp;
        char[] lefts = {'{','[','('};
        char[] rights = {'}',']',')'};
        
        char charStrs[] = str.toCharArray();
        String strUse ="";
        
        for(int i =0; i<charStrs.length;i++){
         for(int j=0;j<3;j++)
         if(charStrs[i]==lefts[j] || charStrs[i]==rights[j])
         strUse+=charStrs[i];
        }
        
        System.out.println(strUse);
        
            Stack s = new Stack();
        for(int k=0;k<strUse.length();k++){
         for(int m=0;m<3;m++){
         if(strUse.charAt(k)==lefts[m]){
         s.push(strUse.charAt(k));
          System.out.println("===+++");   
         }
         if(!s.isEmpty()){
         if((char)(Character)s.peek()=='{' && strUse.charAt(k)=='}')
         s.pop();
         else 
         if((char)(Character)s.peek()=='(' && strUse.charAt(k)==')')
         s.pop();
         else 
             if((char)(Character)s.peek()=='[' && strUse.charAt(k)==']')
             s.pop();
            
             System.out.println("===");    
           }
         }
        
        }
      
        System.out.println(s.isEmpty());
      

  5.   

    解析器啦
    看看编译器的算法,LRLL,忘记啥名字了,呵呵