Я разрабатываю в Java систему для проверки появления комбинации ключевых слов в тексте. Например, у меня есть следующее выражение для проверки: (yellow || red) && sofa
. Я разделил задание на два шага. Первый заключается в обнаружении отдельных слов в тексте. Второй способ - использовать результат для проверки булевского выражения. После короткого веб-поиска я выбираю Apache JEXL.Проблема с булевыми выражениями Java Apache JEXL
// My web app contains a set of preconfigured keywords inserted by administrator:
List<String> system_occurence =new ArrayList<String>() {{
add("yellow");
add("brown");
add("red");
add("kitchen");
add("sofa");
}};
// The method below check if some of system keywords are in the text
List<String> occurence = getOccurenceKeywordsInTheText();
for (String word :occurrence){
jexlContext.set(word,true);
}
// Set to false system keywords not in the text
system_occurence.removeAll(occurence);
for (String word :system_occurence){
jexlContext.set(word,false);
}
// Value the boolean expression
String jexlExp ="(yellow || red) && sofa";
JexlExpression e = jexl.createExpression(jexlExp_ws_keyword_matching);
Boolean o = (Boolean) e.evaluate(jexlContext);
В приведенном выше примере я использую простые слова в булевом выражении. С ASCII и не-составными словами у меня нет проблем. У меня проблемы с не-ASCII и составными ключевыми словами внутри логического выражения, потому что я не могу использовать их как имена переменных.
// The below example fails, JEXL launch Exception
String jexlExp ="(Lebron James || red) && sofa";
// The below example fails, JEXL launch Exception
String jexlExp ="(òsdà || red) && sofa";
Как я могу решить? Правильно ли это?
Извините за мой плохой английский :)