将字符串作为条件 Java 评估

2022-09-01 23:14:44

我必须从D / B中检索一组列值并将其作为条件进行检查。

例如,在 D/B 列中,我将有类似 的字符串。(值是一直比较的值)。我将在我的代码中声明一个变量值,我应该评估此条件。"value > 2""4 < value < 6"

int value = getValue();
if (value > 2)  //(the string retrieved from the D/B)
  doSomething();

我该怎么做??任何帮助都是值得赞赏的。谢谢。


答案 1

下面是使用标准 (Java 1.6+) 脚本库的示例:

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public class Test {

    public static void main(String[] args) throws Exception {
        ScriptEngineManager factory = new ScriptEngineManager();
        ScriptEngine engine = factory.getEngineByName("JavaScript");

        engine.eval("value = 10");
        Boolean greaterThan5 = (Boolean) engine.eval("value > 5");
        Boolean lessThan5 = (Boolean) engine.eval("value < 5");

        System.out.println("10 > 5? " + greaterThan5); // true
        System.out.println("10 < 5? " + lessThan5); // false
    }
}

答案 2

您基本上是在计算脚本表达式。根据该表达式中允许的内容,你可以逃脱非常简单的东西(识别组的正则表达式)或非常复杂的东西(嵌入javascript引擎?)。

我假设你正在看一个简单的情况,其中表达式是:[边界0] [运算符] “值” [运算符] [边界1]

其中一个组,但不是两个 [边界] [运算符] 组都可以省略。(如果两者都存在,则操作员应相同)

我会使用正则表达式来捕获组。

像这样:(?:(\d+)\s*([<>])\s*)?值(?:\s*([<>])\s*(\d+)))?

然后:边界1= 组(1);运算符 1 = 组(2);运算符 2 = 组(3);边界 2 = 组(4)