Java преобразовать строку в логику - PullRequest
0 голосов
/ 15 июня 2019

// с Java 7/8: String logic = "123 ИЛИ 345 ИЛИ 678 И НЕ ИЛИ 901";

//Should evaluate something simililar to this: 
String test1 = "abc345678opq"; String test2 = "abc123901";

boolean isCheckOk1 = test1.contains("123") || test1.contains("345") || test1.contains("678") && !test1.contains("901");

boolean isCheckOk2 = test2.contains("123") || test2.contains("345") || test2.contains("678") && !test2.contains("901");

//where isCheckOk1 will be true

//and isCheckOk2 will be false;

Существует ли в Java универсальный способ достичь этого?

Следующий уровень:

"123 OR 345 OR 678 NAND (901 AND 902)"

Спасибо!

1 Ответ

1 голос
/ 15 июня 2019

Нет, но вы можете использовать регулярное выражение:

Это:

boolean isCheckOk1 = test1.contains("123") || test1.contains("345") || test1.contains("678") && !test1.contains("901");

может быть закодировано как:

boolean isCheckOk1 = test1.matches("(?!.*901).*(123|345|678).*");

«Дополнительные очки» могут быть закодированы как:

boolean isCheckOk1 = test1.matches("(?!.*901.*902)(?!.*902.*901).*(123|345|678).*");

Сложную логику стало бы громоздким в регулярных выражениях.

...