有時候頁面輸入一段布爾字符串表達式,需要得到布爾結果進行判斷,如果直接硬編碼顯得有些冗餘,我們可以利用commons-jexl工具,將字符串轉化爲可執行的java代碼,直接運行處結果,非常的完美。
commons-jexl包可以將字符串轉化爲可執行的java代碼,支持各種表達式運算,包括且、或、異或、取反以及加減乘除等各種運算,且支持動態加載類與方法,功能強大。
maven引入包
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-jexl3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-jexl3</artifactId>
<version>3.1</version>
</dependency>
示例代碼
package com.zhaiky;
import org.apache.commons.jexl3.JexlBuilder;
import org.apache.commons.jexl3.JexlEngine;
import org.apache.commons.jexl3.JexlExpression;
import org.apache.commons.jexl3.MapContext;
/**
* @author zhaikaiyun
* @date 2020/3/27 18:12
* @description
*/
public class Test {
/**
* 布爾表達式判斷
* @param booleanExpress
* @return
*/
public static boolean RuleJudgeResult(String booleanExpress){
JexlBuilder jexlBuilder = new JexlBuilder();
JexlEngine jexl = jexlBuilder.create();
JexlExpression jexlExpression = jexl.createExpression(booleanExpress);
MapContext jexlContext = new MapContext();
boolean result = (boolean) jexlExpression.evaluate(jexlContext);
return result;
}
public static void main(String[] args) {
String booleanExpress="(1==2||1==1) && (2>0)";
System.out.println(Test.RuleJudgeResult(booleanExpress));
}
}