Java:构建逻辑表达式,然后对其进行验证 [英] Java: Build logical expressions and then validate them

查看:289
本文介绍了Java:构建逻辑表达式,然后对其进行验证的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a little functionality where I need to determine whether a rule that a user is creating is syntactically valid.

话虽如此,我正在构建的结构如下:

That being said the structure of what I'm building are like the following:

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

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

These expressions are saved in a string variable, e.g:

String expression = "";

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

//Check if the expression is valid

有效表达

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

Valid expressions are the ones that have a logic operator (<, <=, ==, =>, >) and the output would be true or false (doesn't matter which)

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

无效的表达

无效的表达式是没有正确结构才能确定该表达式为true或false的表达式.

Invalid expressions are the ones that doesn't have the proper structure in order to determine whether that expression is true or false.

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

注意

我尝试使用

Boolean.valueOf(String)

Boolean.valueOf(String)

Boolean.parse(String)

Boolean.parse(String)

其他类型的布尔方法

推荐答案

EDIT 现在将不允许任何表达式成功.

EDIT Will now not allow any expression to be success.

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

这篇关于Java:构建逻辑表达式,然后对其进行验证的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆