zoukankan      html  css  js  c++  java
  • Java 实现String语句的执行(Jexl)

    https://www.jianshu.com/p/1000719e49fa

    1.maven 导入库

    <dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-jexl</artifactId>
    <version>2.0</version>
    </dependency>

    2.代码实例

    import org.apache.commons.jexl2.Expression;
    import org.apache.commons.jexl2.JexlContext;
    import org.apache.commons.jexl2.JexlEngine;
    import org.apache.commons.jexl2.MapContext;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * A Camel Application
     */
    public class MainApp {
    
        /**
         * A main() so we can easily run these routing rules in our IDE
         */
        public static Object convertToCode(String jexlExp, Map<String, Object> map) {
            //创建或检索引擎
            JexlEngine jexl = new JexlEngine();
            //创建一个表达式
            Expression e = jexl.createExpression(jexlExp);
            //创建上下文并添加数据
            JexlContext jc = new MapContext();
            for (String key : map.keySet()) {
                jc.set(key, map.get(key));
            }
            //现在评估表达式,得到结果
            if (null == e.evaluate(jc)) {
                return "";
            }
            return e.evaluate(jc);
        }
    
        public static void main(String... args) throws Exception {
            try {
                Map<String, Object> map = new HashMap<String, Object>(16);
                map.put("money", 6100);
                String expression = "money>=2000&&money<=4000";
                Object code = convertToCode(expression, map);
                System.out.println((Boolean) code);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    

    3. 补充:c# Asp.net

    using System.Web.Script.Serialization;

     public static object EvalJscript(string str)
        {
            object Result = null;
            str = str.Replace("OR", "||");
            str = str.Replace("AND", "&&");
            if (ve == null)
            {
                ve = Microsoft.JScript.Vsa.VsaEngine.CreateEngine();
            }
            Result = Microsoft.JScript.Eval.JScriptEvaluate(str, ve);
    
            return Result;
        }


    作者:咖啡机an
    链接:https://www.jianshu.com/p/1000719e49fa
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    9.8-9.9多校互测与牛客网提高一测
    数位$dp$
    互不侵犯_状压$dp$
    状态压缩dp初学__$Corn Fields$
    树形$dp$学习笔记
    最长公共上升子序列$LCIS$
    区间dp学习笔记
    保护知识产权,让创新更有动力!
    crmeb后台七牛云存储相关配置步骤
    crmeb一款最适合二次开发的开源微信公众号小程序框架
  • 原文地址:https://www.cnblogs.com/kakaisgood/p/10382309.html
Copyright © 2011-2022 走看看