分隔符匹配实现之堆栈

package stack; 

public  class BracketCheckerApp { 

   class StackX { 
     private  int top; 
     private  int size; 
     private  char[] stackArray; 

     public StackX( int sz) { 
      size = sz; 
      top = -1; 
      stackArray =  new  char[sz]; 
    } 

     public  void push( char ch) { 
      stackArray[++top] = ch; 
    } 

     public  char pop() { 
       return stackArray[top--]; 
    } 

     public  boolean isEmpty() { 
       return top == -1; 
    } 
  } 

   class BracketChecker { 
     private String input; 

     public BracketChecker(String in) { 
      input = in; 
    } 

     public  void check() { 
       int len = input.length(); 
      StackX stack =  new StackX(len); 
       for ( int i = 0; i < len; i++) { 
         char ch = input.charAt(i); 
         switch (ch) { 
         case '{': 
         case '[': 
         case '(': 
          stack.push(ch); 
           break
         case ']': 
         case '}': 
         case ')': 
           if (!stack.isEmpty()) { 
             char chx = stack.pop(); 
             if ((chx == ']' && ch != '[') 
                || (chx == '}' && ch != '{') 
                || (chx == ')' && ch != '(')) { 
              System.out.print( "error"); 
            }    
          } else { 
            System.out.println( "error2"); 
          } 
           break
         default
           break

        } 

      } 
     
     if(!stack.isEmpty()){ 
      System.out.println( "failure"); 
       return
    } 
    System.out.println( "success!"); 
     
    } 

    
     
  } 

   public  static  void main(String[] args){ 
    BracketCheckerApp app =  new BracketCheckerApp(); 
    BracketChecker bracket = app. new BracketChecker( "[{}()zaho]"); 
     
    bracket.check(); 
     
     
  } 

}
 
原理:第一步将要匹配的目标字符串解析成字符数组,在循环体里,通过分隔符,设置入栈、出栈的条件。最后,判定栈是否为空,判定是否匹配成功。因为分隔符匹配,总是成对出现的,如果不为空,标示发生错误。



本文转自 randy_shandong 51CTO博客,原文链接:http://blog.51cto.com/dba10g/226610,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值