当前位置: 首页 > 面试题库 >

是否可以为字符串比较计算布尔表达式?

姜志行
2023-03-14
问题内容

我将有一个像

('abc' != 'xyz' AND 'thy' = 'thy') OR ('ujy' = 'ujy')

该字符串将能够具有所需的任意多个“ AND”组。AND组内将没有任何嵌套组。所有组将始终由OR分隔。

我可以只切换AND &&和AND ||

我想要将此字符串传递到某种类型的eval方法中,并输出TRUE或FALSE。

有什么可以做到的吗?


问题答案:

您可以使用JDK1.6随附的内置Javascript引擎来评估包含数学表达式的字符串。

您可以在这里查找:ScriptEngine

这里是一个例子:

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class Myclass {
    public static void main(String[] args) {

        try {

            ScriptEngineManager sem = new ScriptEngineManager();
            ScriptEngine se = sem.getEngineByName("JavaScript");
            String myExpression = "('abc' == 'xyz' && 'thy' == 'thy') || ('ujy' == 'ujy')";
            System.out.println(se.eval(myExpression));

        } catch (ScriptException e) {

            System.out.println("Invalid Expression");
            e.printStackTrace();

        }
    }
}

只要记住要替换以下内容:

“&”和“ &&”,
“ OR”和“ ||”,
“ =”必须为“ ==”

否则它将不接受您的表情,并会引发 javax.script.ScriptException



 类似资料:
  • 我正在尝试这个代码编写练习,我太迷路了! 它甚至不编译,但即使它编译了,我肯定它也不会工作。

  • 问题内容: 我如何布尔计算包含布尔表达式的字符串?喜欢: 用户应该能够定义自己的变量(),并定义自己的布尔表达式()。因此,我将所有表达式仅作为字符串使用。我如何评估它们? 问题答案: 您可以使用Nambari评论的ScriptEngine: 打印0。 还要注意,该表达式不是布尔表达式,而是按位运算。

  • 如何完成名为c的方法,该方法将两个和一个作为输入。如果布尔值为true,则此方法将比较前两个字符串,忽略大小写因素(大写/小写)。如果两个字符串的长度相同,则将它们视为相等的忽略大小写,并且两个字符串中的对应字符的大小写相同。 如果布尔值为false,则此方法应比较两个字符串,如果第一个字符串表示与第二个字符串相同的字符序列,则返回true,否则返回false。 注意:应该返回false 我试图使

  • 问题内容: 我做了几个布尔比较: 听起来像布尔值,并且可以互换。 有时候使用起来更清晰 我想知道: 是和python中预分配? 是始终返回相同的(或者与预先分配)(或)? 它是安全的替代与比较布尔值? 这与最佳实践无关。 我只想知道真相。 问题答案: 您可能永远不需要比较布尔值。如果您正在执行以下操作: …只需将其更改为: 没有或需要。 正如评论者所指出的,有比较布尔值的正当理由。如果两个布尔值都

  • 问题内容: 字符串部分是: 但是当我与: 以上结果为假, 我很困惑,所以有人可以告诉我为什么吗? 问题答案: 该==运营商比较对象引用,在不值秒。 要比较 的值,请使用以下方法: Java中的任何其他对象都是如此-比较值时,请始终使用equals方法而不是使用==运算符。 该方法是的一部分,并且应被将以一种或另一种方式进行比较的类覆盖。

  • 问题内容: 我尝试了以下操作,但是Eclipse为此抛出了一个错误。 检查字符是否正确的正确方法是什么? 问题答案: 检查 没有做任何字符检查之前。返回的字符是原始类型,绝不会是: 如果您尝试一次处理一个字符,则可以使用: (与不同,终结符检查不是在Java中完成的。)