Java преобразовать последовательность строк в логическую функцию - PullRequest
0 голосов
/ 18 июня 2020

У меня есть несколько цепочек строк, записанных следующим образом:

(A и (B или C)

(A и D) или ( A и (B или C))

Где A, B, C и D - все логические значения. Полный список возможных комбинаций велик, я ищу гибкий код, который могу перевести полный текст и оценить результат. Есть мысли?

1 Ответ

0 голосов
/ 18 июня 2020

Попробуйте это.

static boolean eval(String s, Map<String, Boolean> variables) throws ScriptException {
    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine engine = manager.getEngineByName("JavaScript");
    for (Entry<String, Boolean> e : variables.entrySet())
        engine.put(e.getKey(), e.getValue());
    return (boolean) engine.eval(s.replace("and", "&&").replace("or", "||"));
}

и

boolean result = eval("(A and (B or C))", Map.of("A", true, "B", false, "C", true));
System.out.println(result);
// -> true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...