分隔符的匹配问题

/**
 * 分隔符的匹配问题就是在一段文本中{}[] ()要成对出现
 * 我们可以这么考虑,{ [ (一定是在 )]}的前面出现,那么我们遇到左面的分隔符就可以把他们压入栈中,碰到右面的分隔符就弹出栈顶的元素
 * ,当然循环完了 也要检查栈是否为空,如果不为空,那么就说明左面的分隔符多了,也会不匹配
 * @author hp
 *
 */

import java.util.Stack;
//分隔符的匹配问题
public class MainA {
	private String input;
	public MainA(String in){
	   this.input = in;
	}
	
	//检查分隔符是否匹配
	public void chick(){
		int stackSize = input.length();
		Stack<Character> stack = new Stack<Character>();
		boolean flag = false;
		for(int i=0;i<input.length();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(ch=='}'&& chx != '{' 
							|| (ch ==')'&& chx!= '(')
							||(ch == ']'&& chx!='[')){
						System.out.println("error char at "+i);
						flag = false;
					}
					else{
						flag = true;
					}
				   }else{
					   System.out.println("error char at "+i);
				   }
				   break;
				   default:
					   break;
			}
		}
		if(!stack.isEmpty()){
			System.out.println("error missing right delimiter");
		}
		if(flag == true){
		System.out.println("匹配成功");	
		}else{
			System.out.println("匹配失败");
		}
	}
public static void main(String[] args) {
    new MainA("(ssh[ss{}}])").chick();
}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值