есть доступные парсергенераторы, для которых вы можете определить грамматику.
Но если бы ты только получил || и && как операторы, а true и false как значения, вы можете легко сделать это самостоятельно, внедрив очень простой конечный автомат:
1.) Разбейте строку на токены
2.) Анализирует крайнее левое значение с помощью Boolean.parseBoolean (токен) и сохраняет его значение в некоторой переменной экземпляра (ваше состояние)
3.) Объедините вашу переменную экземпляра со следующим логическим токеном, используя заданный оператор
4.) Повторяйте шаг 3, пока не закончите через всю строку
Кажется, это работает, хотя я не проверял это тщательно:)
public class BooleanFSParser {
private boolean parse(String data) {
String[] tokens=data.split("\\s");
boolean state=Boolean.parseBoolean(tokens[0]);
for (int i=1;i<(tokens.length / 2) + 1;i=i+2){
if (tokens[i].equals("&&")){
state=state && Boolean.parseBoolean(tokens[i+1]);
}else{
state=state || Boolean.parseBoolean(tokens[i+1]);
}
}
return state;
}
public static void main(String[] args) {
BooleanFSParser parser = new BooleanFSParser();
boolean val = parser.parse("true && true || false");
System.out.println(String.valueOf(val));
}
}
Это должно дать вам правильно проанализированное значение, но оно станет немного сложнее, если вы, например, допустите скобки;)
повеселись и проверь здесь теорию
Конечнозонный state_machine