Проверка наличия скобок, когда в String найдена математическая логика - PullRequest
0 голосов
/ 29 мая 2019

В данный момент я работаю с некоторыми логическими и математическими выражениями, заданными как String. К сожалению, необходимо использовать скобки для выражений при использовании символов: '&' и '|' (используется вместо '||' ).

Допустимые выражения:

(x + 2) & (y * 4) | (i - 4) (5 > 4) | (6y + 4)

Неверные выражения:

x + 2 & y * 4 | i - 4 5 > 4 | 6y + 4

Я пытался проверить строку с помощью RegEx, что-то вроде:

[)][ \t\n\r]*[&][ \t\n\r]*[(] имеет смысл.

Проблема в том, как найти все '&' и '|' символов и найти наличие рядом скобок?

Редактировать: у меня есть решение, основанное на поиске индекса этих символов, затем в обоих направлениях и в поисках скобок. Может быть, я могу сделать это более простым способом с RegEx?

1 Ответ

0 голосов
/ 29 мая 2019

Относительно простое решение:

  1. разделить на & и |;
  2. обрезать все подвыражения;
  3. проверьте, все ли они начинаются с ( и заканчиваются ).

Отрывок:

String s = "(x + 2) & (y * 4) | (i - 4)";

boolean valid = Arrays.stream(s.split("[&|]"))
                      .map(String::trim)
                      .allMatch(p -> p.startsWith("(") && p.endsWith(")"));

Если вам нужно рассмотреть более сложные сценарии, чем те, которые представлены в вашем вопросе (вложенные выражения и т. Д.), Вам нужно написать синтаксический анализатор.

...