`

jexl 执行字符串表达式

    博客分类:
  • Java
阅读更多

相关包下载地址: 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

分享到:
评论

相关推荐

    Java实现计算字符串表达式

    在Java编程语言中,计算字符串表达式是一项常见的任务,它涉及到解析、编译和执行包含数学运算符和操作数的字符串。这篇博客“Java实现计算字符串表达式”可能讲解了如何利用Java来处理这种问题,虽然具体的实现细节...

    jexl的jar包以及应用举例

    3. **编译表达式**:使用`JexlEngine.createExpression()`方法将字符串表达式转化为JexlExpression对象。 4. **执行表达式**:通过`JexlExpression.evaluate()`方法,传入上下文(包含变量和Bean)来执行表达式,并...

    java解析表达式JEXL实现办法

    JEXL支持丰富的表达式语法,包括算术运算、逻辑运算、比较操作、字符串处理、数组和集合操作等。例如,你可以使用三元运算符 (`? :`)、条件表达式 (`if`)、循环 (`for`, `while`) 甚至自定义函数。 JEXL还提供了...

    Java实现字符串转换成可执行代码的方法

    最后,我们使用JexlEngine的createExpression方法将字符串表达式编译成可执行的代码,并将其执行结果返回。 示例代码 在上面的代码中,我们提供了一个示例代码,演示了如何使用DyMethodUtil类将字符串转换成可执行...

    java表达式转代码,含示例代码以及相关jar包

    这个类可能会包含一个方法,接收一个字符串表达式,然后使用JEXL库将它转化为可执行的Java代码。 下面是一个简化的`ConvertToCode`类的可能实现: ```java import org.apache.commons.jexl2.JexlEngine; import ...

    jexl3的jar包

    1. `createExpression(String jexl)`:这个方法用于将一个字符串形式的Jexl表达式转换为`Expression`对象。 2. `createScript(String jexl)`:与`createExpression`类似,但适用于多次执行的更复杂脚本。 3. `...

    字符串计算公式计算

    在Java编程中,将字符串表示的计算公式转化为可执行的表达式并计算其结果是一项常见的需求。这通常涉及到解析字符串,构建表达式树,然后进行求值。在本篇文章中,我们将深入探讨如何实现这个功能。 首先,我们需要...

    commons-jexl-2.1.1

    通过`createScript`方法,你可以将字符串表达式转换为可执行的`JexlScript`对象。 4. **脚本执行**:`JexlScript`对象可以通过`evaluate`方法与上下文一起使用,来执行表达式并获取结果。这使得你可以方便地在运行...

    jexl实例下载

    `这样的表达式来执行字符串拼接。 2. **强大的功能**:JEXL支持多种操作,包括算术运算、比较操作、逻辑运算、数组和对象的操作等。它还可以访问和修改Java对象的属性,以及调用方法。 3. **上下文与作用域**:...

    jexl常用包 全

    - **内置函数**:包括数学运算、字符串处理、集合操作等,增强了表达式的功能。 **4. 常见用例** - **条件判断**:`if (jexl.eval('x &gt; 5', context)) { ... }`,可以根据表达式的值执行不同的代码分支。 - **...

    commons-jexl-2.1.1包的源码

    2. `Expression`: 表示一个Jexl表达式,通过`JexlEngine`编译字符串形式的表达式得到。它可以被多次执行,且每次执行的结果可能不同,取决于上下文环境的变化。 3. `JexlContext`: 上下文接口,存储了表达式执行过程...

    commons-jexl-2.0.jar

    1. **增强的类型转换**:JEXL 2.0版本提供了更智能的类型转换机制,能够自动将字符串转换为数值或其他类型,使得表达式的编写更加便捷。 2. **上下文对象**:JEXL允许用户定义一个上下文(Context)对象,用于存储...

    Calculator.zip

    4. **编译器技术**:在Java中,我们可以使用`javacompiler` API或者第三方库如JEXL (Java Expression Language) 或者Ognl (Object-Graph Navigation Language) 来编译和执行字符串表达式。这些工具能够将字符串公式...

    java动态特性eval

    如果需要解析的字符串是JavaScript代码,可以使用`ScriptEngineManager`创建一个`ScriptEngine`实例,然后调用`eval()`方法执行字符串中的JavaScript表达式。这在Java中实现与JavaScript交互时非常有用,但不适用于...

    Python库 | pyjexl-0.1.2-py2.py3-none-any.whl

    - **内置函数**:`pyjexl`支持一些内置函数,如数学运算、字符串操作等,这些函数与JavaScript的JEXL保持一致。 - **自定义函数**:用户可以注册自己的函数到JEXL上下文中,这样在表达式中就可以调用这些自定义函数...

    java dhc,计算

    在Java中,DHC可能指的是动态配置或动态处理能力,特别是在处理字符串、数学表达式或者XML等数据时。它允许程序在运行时根据特定条件或用户输入来动态地构建和计算表达式。 在Java中,表达式计算通常涉及到以下几个...

    jxls导excel所需的所有jar包

    8. **commons-lang3-3.x.x.jar**: Apache Commons Lang是Java工具包的一部分,提供了许多实用的函数,如字符串处理、日期时间操作等,JXLS在处理数据时可能需要这些功能。 以上是JXLS库正常运行所需的基本依赖。在...

    apache commons笔记1

    15. **Jexl**:是一个表达式语言,扩展了 JSTL 表达式语言,常用于动态计算和脚本执行。 16. **JXPath**:提供了使用 XPath 语法操作 JavaBeans 的工具,支持 Java 对象的各种导航和修改。 17. **Lang** 包:包含...

    commons包介绍1

    19. **Lang**: Commons-Lang提供了许多对`java.lang`包中类的扩展,包括字符串处理、日期时间操作、数组工具等。 20. **Latka**: Latka是一个HTTP功能测试包,用于自动化测试和验收。 21. **Launcher**: Launcher...

Global site tag (gtag.js) - Google Analytics