评估Java

时间:2016-04-13 16:09:36

标签: java regex if-statement

简介

嗨,我目前正在开发一个导入框架。用户将使用该框架将大量Excel工作表中的数据映射到系统中的实体。某些值是否需要映射到实体取决于文件中某些值的条件。它是一个用Java构建的Web应用程序(Java servlets)。

要点

系统用户需要为系统提供以下自定义条件:

CELLD4 == "Hello world"

我的问题是:如何将CELLD4 == "Hello world"条件作为字符串提供给系统,让系统将其解释为if语句,如:

if (CELLD4 == "Hello world") {execute something}

其他人所做的是从双等号(==)之前和双等号之后提取两个值,然后执行等号检查以检查值是否相同。但似乎有更好,更简单的方法来解决这个问题。谁向我提出了如何最好地让系统解释系统用户输入的自定义条件的建议?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你可以使用ScriptEngine实现它,即:

public static void main(String[] argv) throws Exception {
    ScriptEngineManager mgr = new ScriptEngineManager();
    ScriptEngine engine = mgr.getEngineByName("JavaScript");
    String expression2 = "CELLD4.equalsIgnoreCase(\"Hello world\")";

    Map<String, Object> map = new HashMap<>();
    map.put("CELLD4", getCELLD4());

    engine.setBindings(new SimpleBindings(map), ScriptContext.ENGINE_SCOPE);
    if ((boolean) engine.eval(expression2)) {
        System.out.println("YAY");
    } else {
        System.out.println("NAY");
    }
}

public static String getCELLD4() {
    return "Hello World";
}

输出为YAY

也许有更好的解决方案,因为这需要一些不好的东西。当然,你仍然必须以某种方式解决在表达式中传递的变量并将其绑定到某个东西。