查看了一些开源表达式项目,简单对比后,决定采用ikexpression
项目地址http://code.google.com/p/ik-expression/
SVN 地址http://ik-expression.googlecode.com/svn/trunk/
特点如下:
1)开源、可扩展、不依赖任何第三方java库;
2)支持预编译;
对多次执行仅需解析1次,在需要大量执行时效率能大大提高;
3)支持语法编译测试;
在定义表达式入库时保证语法准确性;
4)支持字符串+和比较(>、>=、==、<、<=);
5)支持自定义函数(文件配置或程序动态绑定);
public class E2Say{
public static int indexOf(String p1, String p2){
return p1.indexOf(p2);
}
public static void main(String[] args) throws Throwable{
E2Say obj = new E2Say();
FunctionLoader.addFunction("indexOf", obj, E2Say.class.getMethod("indexOf", String.class, String.class));
System.out.println(ExpressionEvaluator.evaluate("$indexOf(\"abcd\",\"ab\")==0?1:0"));
}
}
6)支持中文变量名;
7)支持表达式换行,增强可读性;