我有一个像((TRUE && TRUE) || (TRUE && FALSE))
这样的字符串,我希望将其转换为布尔值。我怎样才能做到这一点?
我尝试使用Boolean.parseBoolean(String)
和Boolean.valueOf(String)
,但我认为只有当字符串符合'True'时才能正常工作
答案 0 :(得分:2)
你可以"滥用"与JavaScript的相似性并使用标准的可用脚本引擎:
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
String expr = "((TRUE && TRUE) || (TRUE && FALSE))".toLowerCase();
boolean result = Boolean.valueOf(engine.eval(expr));
不确定小写和valueOf
是否正确。也许(Boolean)
案件可能会发生。
答案 1 :(得分:1)
您需要构建表达式解析器。 首先,您需要确定允许的展示的语法。从上面的语法看起来像C.你应该能够通过谷歌搜索为C表达式找到丰富的解析器示例。当然,您也可以决定手动编写一个。在解析语言时,您可以选择使用ANTLR或更传统的LEX + YACC等生成器,在这种情况下,您将提供基于语法的语言描述,代码生成器将吐出程序解析这种语言。然后,您将在程序中包含此类生成的代码。对于众所周知的语言,例如C和JAVA,这些解决方案已经有预先编写的语法,尽管你可能只需要提取它的表达部分。
如果表达式采用传统解释语言(如Python或Javascript),则可以选择在java程序中加入解释器,并将表达式反馈给表达式。
最后,如果您的表达式是Java语法,并且您可以灵活地使用早期版本的Java 9,那么您可以使用新的Java Shell feature。