栈,简单来说,就是后进先出。
而括号匹配,恰巧遵循这种规则,下面这一个小demo将实现这一功能。
public class StackMatch {
public static void main(String[] args) {
String str = "----(([123{)2(0)2}]))----";
System.out.println("结果---"+stackMatch(str));
}
public static Boolean stackMatch(String str){
char [] charArray = str.toCharArray();
LinkedList<Character> stack = new LinkedList<>();
for (int i = 0; i < charArray.length; i++) {
if(charArray[i] == '{' || charArray[i] == '(' || charArray[i] == '['){
stack.push(charArray[i]);//出现左括号,压栈
}
if(charArray[i] == '}' || charArray[i] == ')' || charArray[i] == ']'){
if(stack.isEmpty()){
System.out.println("没有左括号与之对应了....");
return false;
}else{
if((charArray[i] == '}' && stack.peek() == '{')
|| (charArray[i] == ')' && stack.peek() == '(')
||( charArray[i] == ']' && stack.peek() == '[' )) {
stack.pop();//pop()移除堆栈顶部的对象,并作为此函数的值返回该对象。
}else{
System.out.println("左右括号不匹配!");
return false;
}
}
}
}
return stack.isEmpty();
}
}