主要是判断逻辑表达式是否合法
public static boolean validateExpression(String expression){
// 统一大写
expression=expression.toUpperCase();
//去空格 替换一些符号
expression=expression.replace(" ","")
.replace("AND","?")
.replace("OR","?")
.replace("NOT","!")
.replace("(","(")
.replace(")",")");
//判断几个错误的例子
if(expression.contains("??")||expression.contains("!!")
||expression.contains("?/)")||expression.contains("!/)")||expression.contains("!?")){
return false;
}
// 必须是倒数第二步:判断小括号左右括弧是否等同,括弧位置是否合法,如果括弧全部合法,则去掉所有括弧和!
int num = 0;
char[] expChars = expression.toCharArray();
for (int i = 0; i < expChars.length; i++) {
char temp = expChars[i];
if (temp == '(') {
num++;
} else if (temp == ')') {
num--;
}
if (num < 0) {
return false;
}
}
if (num > 0) {
return false;
}
expression = expression.replaceAll("\\(|\\)|!", "");
//不能以?开头 或者结尾
if(expression.startsWith("?")||expression.endsWith("?")){
return false;
}
//到这里每一项都是以?隔开,所以自己判断项是不是合法就好
return true;
}
public static Boolean getEressionResult(String expression){
// 将 expression 项处理成a,b a:true b:false
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
engine.put("a",true);
engine.put("b",false);
if(engine.eval(expression.toString()).toString().equals("true")){
return true;
};
}