相关包下载地址: 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
本文介绍如何使用 Apache Commons Jexl3 进行表达式解析与评估,包括基本运算、正则匹配、方法调用及集合操作等,并提供完整的代码示例。
1296

被折叠的 条评论
为什么被折叠?



