JAVA逻辑表达式的校验和计算

主要是判断逻辑表达式是否合法
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;
};
}

你可能感兴趣的:(java工具)