Как разделить логические выражения на операторы (JAVA)?

Как разделить логические выражения на операторы?
У меня есть выражения в виде следующей строки:

String expression = “((468551X68X304.NAOK == "2") and (468551X68X305.NAOK > "2") and (468551X68X308.NAOK != "2000" or 468551X68X308.NAOK > "2000")) “;

Я хочу получить все переменные в массиве, например:

a[0] = “468551X68X304.NAOK”;
a[1] = “468551X68X305.NAOK”;
a[2] = “468551X68X308.NAOK”;
a[3] = “468551X68X308.NAOK”;

Может кто-то дать мне идею, чтобы решить его?

Спасибо,

1 ответ

  1. Это можно сделать с помощью регулярного выражения.

    Следующее регулярное выражение соответствует переменным, которые отформатированы как переменные в логических выражениях:

    \d+X\d+X\d+\.NAOK
    

    где каждый \d+соответствует одной или нескольким цифрам.

    Для извлечения переменных с помощью этого regex, вы можете использовать java.util.regex.Patternи java.util.regex.Matcherкак это:

    String booleanExpression = "((468551X68X304.NAOK == \"2\") and (468551X68X305.NAOK > \"2\") and (468551X68X308.NAOK != \"2000\" or 468551X68X308.NAOK > \"2000\")) ";
    String regex = "\d+X\d+X\d+\.NAOK"; // Note that backslash pairs don't denote two backslashes here. Because we're representing the regex as a string literal, we have to use escape sequences to represent the backslashes in the regex
    
    Matcher m = Pattern.compile(regex).matcher(booleanExpression);
    ArrayList<String> variables = new ArrayList<>();
    while(m.find()) // Match a NEW variable (one that wasn't matched in previous iterations
        variables.add(m.group()); // Add the matched variable to the ArrayList