相关包下载地址: http://commons.apache.org/proper/commons-jexl
还需要下载一个依赖的包: commons-logging-1.2.jar 也是在apache官网下载
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; import org.apache.commons.jexl3.JexlBuilder; import org.apache.commons.jexl3.JexlContext; import org.apache.commons.jexl3.JexlEngine; import org.apache.commons.jexl3.JexlExpression; import org.apache.commons.jexl3.MapContext; public class JexlTest { public static void main(String[] args) { //1.创建jexl JexlEngine jexl = new JexlBuilder().create(); // 2.做一个jexlContext并把它放入其中, MapConext类clear方法可以清空set过的值 JexlContext jc = new MapContext(); // 3.设置变量的值,这个值可以在执行的表达式中调用 jc.set("i",3); jc.set("j",4); // 4.创建一个将要执行的表达式 JexlExpression e = jexl.createExpression("i+j"); // 5.执行并返回结果 Object o = e.evaluate(jc); System.out.println(jc.get("i") + "+"+ jc.get("j") + " = " + o); //一个正则的执行方式 jc.set("str", "jacktan"); jc.set("HDI_Board", "yes"); e = jexl.createExpression("str=~\".*tan\""); o = e.evaluate(jc); System.out.println(o); //执行多个条件 e=jexl.createExpression("str=~'.*tan' && str != 'jacktan'"); System.out.println(e.evaluate(jc) + " aaa"); e=jexl.createExpression("HDI_Board=='yes'"); System.out.println(e.evaluate(jc) + " bbb"); //执行对象方法 JexlTest sjt = new JexlTest(); jc.set("SimpleJexlTest",sjt); jc.set("UDA_NAME", "HDI_Board"); jc.set("UDA_VALUE", "yes"); e = jexl.createExpression("SimpleJexlTest.current(UDA_NAME,UDA_VALUE)"); o = e.evaluate(jc); System.out.println(o); //List测试 List<Object> l = new ArrayList<Object>(); l.add("Hello from location 0"); Integer two = new Integer(2); l.add(two); jc.set("array", l); //list的元素 e = jexl.createExpression("array[1]"); o = e.evaluate(jc); System.out.println(o); // list元素的长度 e = jexl.createExpression("array[0].length()"); o = e.evaluate(jc); System.out.println(o); //out.print("The length of the string at location 0 is : ", o, Integer.valueOf(21)); } public static boolean current(String uda,String val) { System.out.println(uda + " " + val); Map<String, String> map = new HashMap<String, String>(); map.put("abc", "yes"); map.put("HDI_Board", "no"); map.put("customer_num", "9175350"); for ( Entry<String, String> entry : map.entrySet() ) { if ( entry.getKey().equals(uda) && entry.getValue().matches(val) ) { return true; } } return false; } }
结果:
3+4 = 7
true
false aaa
true bbb
HDI_Board yes
false
2
21