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