举例1:a+b*(5-4]{x+b+b{1+2}}
返回:false
因为括号不配对
举例2:(a+b*(5-4]){x+b+b{1+2}}
返回:false
因为括号不匹配
举例3:(a+b*[5-4]){x+b+b{1+2}}
返回:true
代码:
import org.apache.commons.collections.ArrayStack;
import java.util.HashMap;
import java.util.Map;
public class ChkExpression {
public boolean chkLegal(String expression) {
//定义一个栈数据结构
ArrayStack stack = new ArrayStack(expression.length());
//定义HashMap存储一对匹配的符号
Map<String,String> map=new HashMap<>( );
map.put( "{","}");
map.put( "[","]");
map.put( "(",")" );
//把输入的字符串转化成字符类型的数组
char[] exp=expression.toCharArray();
//遍历数组
for (int i = 0; i < exp.length; i++) {
//如果是开始符号,则压入栈
if(exp[i] == '{' || exp[i] == '[' || exp[i] == '(') {
stack.push(exp[i]);
}
//如果是结束符号,则判断当前栈顶元素和该结束符号是否是对应关系
if(exp[i] == '}' || exp[i] == ']' || exp[i] == ')'){
if (!stack.empty()){ //判断栈是否为空,因为如果此时栈为空
//那么后面肯定配对不起,肯定返回false
String c = String.valueOf(stack.pop());
if(exp[i] != map.get(c).toCharArray()[0]) {
return false;
}
}else {
return false;
}
}
}
if (stack.empty()){ //判断栈是否为空,此时为空,说明符号都成功配对,返回true
return true;
}//若不为空,返回false
return false;
}
public static void main(String[] args) { //主方法
String s = "(a+b*[5-4])*{x+b+b*{1+2}}";
ChkExpression chkExpression=new ChkExpression();
System.out.println(chkExpression.chkLegal( s )); //输出结果
}
}