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

    技术2022-07-11  106

    主要是判断逻辑表达式是否合法 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; }; }
    Processed: 0.010, SQL: 10