如何将字符串转换为布尔表达式

时间:2015-08-04 13:56:31

标签: java

我有一个像((TRUE && TRUE) || (TRUE && FALSE))这样的字符串,我希望将其转换为布尔值。我怎样才能做到这一点?

我尝试使用Boolean.parseBoolean(String)Boolean.valueOf(String),但我认为只有当字符串符合'True'时才能正常工作

2 个答案:

答案 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