如何将以字符串形式编写的条件转换为Java“如果”条件

时间:2019-07-02 16:12:16

标签: java string

我有一个用户界面,用户可以在其中建立查询,然后将这些条件应用于文本文件中的搜索。 假定字符串如下: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;

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

关于如何执行此操作的任何想法?

1 个答案:

答案 0 :(得分:0)

根据您的评论,我可以使用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;
}