【问题标题】:How do I convert a condition written in string to a Java "if" condition如何将字符串中写入的条件转换为 Java“if”条件
【发布时间】:2019-07-02 16:12:16
【问题描述】:

我有一个 UI,用户可以在其中构建查询,然后应用这些条件在文本文件中进行搜索。 假设字符串如下:A and (B or C) 我还可以访问每个值 (A, B, C)、逻辑运算符 (and, or) 和分组括号。

所以我需要的是:line.contains(A) && (line.contains(B) || line.contains(C))

boolean found = false;

BufferedReader reader = new BufferedReader(new InputStreamReader(input));
String line = null;
while ((line = reader.readLine()) != null && !contains) {
    if (line.contains(A) && (line.contains(B) || line.contains(C))) {
        found = true;
    }
}

return found;

上述特定条件也可能不起作用,因为我在每一行中都在搜索,并且条件可能在不同的行中。但这是我必须处理的另一个问题:)

你知道怎么做吗?

【问题讨论】:

  • 可以有比 A,B,C 更多的值吗?
  • @sidgate 最多可以有 5 个条件:A、B、C、D、E :)
  • 解析输入字符串,构建(与)和(或)节点树,然后轻松计算结果。
  • 我喜欢你的问题。您需要一个表达式树数据结构,从中您可以轻松获取表达式的值。我已经用 C++ (github.com/TaQuangTu/ExpressionTreeC-) 实现了它。当然我不是一个好的程序员,所以我的代码不干净,但我认为它足以让你解决一些小问题。

标签: java string


【解决方案1】:

根据您的 cmets,我能够使用 ScriptEngineManager 解决我的问题。我正在构建我想使用JavaScript 语言和engine.eval(query) 评估的条件。

private boolean containsSearchQuery(InputStream input, String searchQuery) {
    boolean match = false;

    // create a script engine manager
    ScriptEngineManager factory = new ScriptEngineManager();
    // create a JavaScript engine
    ScriptEngine engine = factory.getEngineByName("JavaScript");

    BufferedReader reader = new BufferedReader(new InputStreamReader(input));
    String lines = reader.lines().collect(Collectors.joining());

    engine.put("lines", lines);

    try {
        match = (boolean) engine.eval(searchQuery);
    } catch (ScriptException e) {
        System.out.println("Error: " + e.getMessage());
    }

    return match;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-21
    • 2022-11-23
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    相关资源
    最近更新 更多