Java:构建逻辑表达式然后验证它们

时间:2016-06-30 18:06:26

标签: java boolean

我有一些功能,我需要确定用户创建的规则是否在语法上有效。

据说我正在建设的结构如下:

  • 1 == 1
  • 1 + 1 == 1
  • 1 + 1 == 1 OR 1 == 1
  • 以上示例的更多组合

这些表达式保存在字符串变量中,例如:

String expression = "";

while(items.hasNext())
{
    String currentItem = items.next();
    expression += currentItem.value();
}

//Check if the expression is valid

有效表达

有效表达式是具有逻辑运算符的表达式(<,< =,==,=>,>),输出将为true或false(无关紧要)

  • 1 == 1
  • 1< 2
  • 1 == 1 OR 1< 4
  • 4 == 9 OR 9 == 3

INVALID EXPRESSIONS

无效表达式是那些没有正确结构的表达式,以确定该表达式是真还是假。

  • 1
  • 1 + 1
  • 1 ===
  • == 1
  • 1
  • 11(即数字,然后是数字)

注意

我尝试过使用

  

通过Boolean.valueOf(字符串)

     

Boolean.parse(字符串)

     

其他类型的布尔方法

1 个答案:

答案 0 :(得分:4)

编辑现在不允许任何表达式成功。

EDIT2 评估内容的示例。

import javax.script.ScriptEngineManager;
import javax.script.*;

public class HelloWorld{

    public static void main(String[] args) 
    {
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("JavaScript");

        String expression = "1+2";   // evaluates to Failure: 3
        String expression = "1+a";   // evaluates to Failure:
        String expression = "1==1";  // evaluates to Success: true
        String expression = "1==2";  // evaluates to Failure: false
        try
        {
            Object result = engine.eval(expression);

            if(result instanceof Boolean)
            {
                System.out.print("Success: ");
                System.out.println(result);
            }
            else
            {
                System.out.print("Failure: ");
                System.out.println(result);
            }
        }
        catch(ScriptException e)
        {
            // handle
            System.out.println("Failure");
        }
    }
}

https://docs.oracle.com/javase/7/docs/api/javax/script/ScriptEngine.html

https://docs.oracle.com/javase/7/docs/api/javax/script/ScriptEngineManager.html