【问题标题】:How to evaluate custom conditions in java如何在java中评估自定义条件
【发布时间】:2020-09-08 08:59:27
【问题描述】:

我想在 Java 中创建一个条件评估器,其工作方式如下:

class ConditionEvaluator{
    String condition;
    ConditionEvaluator(String condition){
        this.condition = condition;
    }
    boolean isTrue(){
        /*
        * Code here
        */
    }
}

public static void main(String[] args){
    ConditionEvaluator c1 = new ConditionEvaluator("1==1");
    ConditionEvaluator c2 = new ConditionEvaluator("  \"hi\".equals(\"hi\")    ");
    ConditionEvaluator c3 = new ConditionEvaluator("3==4");
    System.out.print(c1.isTrue(),c2.isTrue(),c3.isTrue());
}

输出应该是:

true true false

【问题讨论】:

  • 只有两个测试用例来验证这个isTrue方法,一个是==到两个数字,另一个是.equals到两个字符串。只需用这个逻辑实现isTrue
  • 那些测试用例只是示例。它必须适用于任何类型的条件。
  • 只使用弹簧法术(除非你故意想重新发明轮子):docs.spring.io/spring/docs/3.0.x/reference/expressions.html

标签: java spring conditional-statements eval


【解决方案1】:

好的,我希望您在教育目的中需要它并且不要在生产环境中使用它(如果您这样做,我建议您学习使用 Stack/Deque 数据结构解析字符串)。 实现目标的最粗略方法是:

public class ConditionEvaluator {

    private String expression;

    public ConditionEvaluator(String expression) {
        this.expression = expression;
    }

    public boolean isTrue() throws Exception {
        if (expression.contains("==")) {
            return parseTwoEquals();
        } else if (expression.contains(".equals")) {
            return parseEquals();
        } else throw new Exception();

    }

    private boolean parseTwoEquals() throws Exception {
        String[] args = expression.split("==");
        if (args.length == 2) {
            return args[0].trim().equals(args[1].trim());
        } else throw new Exception();
    }

    private boolean parseEquals() throws Exception {
        String s = expression.replace("\"", "").replace("(", "").replace(")","");
        String[] split = s.split(".equals");
        if (split.length == 2) {
            return split[0].trim().equals(split[1].trim());
        } else throw new Exception();
    }
}

我相信你可以自己创建的异常类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多