public static void main(String[] args) {
String str = "(][[[]fs{a}[]d][s[]][][d[]ds])";
char[] c = str.toCharArray();
Stack<Character> stack = new Stack<Character>();
for(int i = 0;i < c.length;i++){
if(c[i] == '(' || c[i] == '{' || c[i] == '['){
stack.push(c[i]);
} else{
if(!stack.isEmpty()){
//获取栈顶元素
char stackTop = stack.peek();
if(stackTop == '(' && c[i] == ')'){
stack.pop();
continue;
} else if(stackTop == '{' && c[i] == '}'){
stack.pop();
continue;
} else if(stackTop == '[' && c[i] == ']'){
stack.pop();
continue;
} else if(((c[i] == ')' && stackTop != '(') || (c[i] == '}' && stackTop != '{') || (c[i] == ']' && stackTop != '['))){
//如果当前元素是')}]'这些括号,且栈顶元素不能与之配对,则该字符串中的括号也是不配对
stack.push(c[i]);
break;
}
} else if(c[i] == ')' || c[i] == '}' || c[i] == ']'){
//当栈中元素为空时,当前元素为这些括号时,则该字符串括号一定是不配对的
stack.push(c[i]);
break;
}
}
}
//循环完了只有如果栈中的元素为空,则表示该字符串中的括号是配对的或者该字符串根本就没有括号。
if(stack.isEmpty()){
System.out.println(true);
} else{
System.out.println(false);
}
}
第二种方法:
1、首先遍历该字符串,取出该字符串中的所有的括号存入到一个List或者数组中。
2、遍历该List或者数组,进行匹配,这样就减少了其他字符造成括号匹配的难度。