Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何解析具有自定义逻辑条件的字符串?_Java_String_Parsing_Boolean - Fatal编程技术网

Java 如何解析具有自定义逻辑条件的字符串?

Java 如何解析具有自定义逻辑条件的字符串?,java,string,parsing,boolean,Java,String,Parsing,Boolean,我有一个包含许多行条件字符串的文件,我需要读取该文件并将逻辑条件字符串转换为实际代码。有几个参数,条件的每一行检查一个或多个参数是否满足指定值或包含指定值。例如: $parameterA = "value_1" AND ($parameterB CONTAIN "%value_2%" OR $parameterC = "value_3") “=”、“和”和“或”具有“==”、“&&”和“||”的含义。“%”是通配符 在我将其转换为代码后,它应该如下所示: if (obj.parameterA

我有一个包含许多行条件字符串的文件,我需要读取该文件并将逻辑条件字符串转换为实际代码。有几个参数,条件的每一行检查一个或多个参数是否满足指定值或包含指定值。例如:

$parameterA = "value_1" AND ($parameterB CONTAIN "%value_2%" OR $parameterC = "value_3")
“=”、“和”和“或”具有“==”、“&&”和“||”的含义。“%”是通配符

在我将其转换为代码后,它应该如下所示:

if (obj.parameterA == "value_1" && (obj.parameterB.contains("value_2") || obj.parameterC == "value_3"))
     return true;
else return false;
其中“obj”是某个类的实例


我在这里搜索了其他帖子,看来ANTLR可能是一个不错的选择。但是,我没有这方面的经验,也不知道在Java中使用它有多困难。在深入了解ANTLR的所有细节之前,我只想看看是否还有其他好主意。非常感谢你的帮助

实际上,我不知道现有库是否会这样做,但计算表达式的经典方法是分两步进行:

表达式采用中缀表示法,因此需要将其转换为前缀表示法,这是为了删除括号并将运算符放在操作数前面

在第二步中,通过使用简单的递归算法对表达式求值,而递归算法也将负责解析变量

还有一件事,你应该给赋值操作符最大优先级

我已经编写了一个表达式计算器的开源实现:也许您可以扩展它以满足您的需要


希望这能有所帮助。

对于非常简单的语言(如布尔表达式),像ANTLR这样的工具可以工作,但确实有些过分了。您可以很容易地手工编写解析器。请参阅我的SO

侧注,您可能想要
对象参数a.equals(“value_1”)
而不是
=
。行必须保持原样,或者可以是javascript?我这样问是因为在这种情况下,您可以使用内置的javascript引擎。@hmjd:谢谢您指出这一点。我通常使用C++,我不擅长java。我应该在我的帖子中提到这一点。@JuanAlbertoLópezcavalotti:这是一个由其他人生成的文本文件。现在看来,这条线必须保持现状。我没有使用javascript的经验。我需要对行进行什么样的更改才能使用javascript?谢谢。如果你能用javascript生成这行代码,或者进行某种转换,那么你就可以用Rhino来计算,更多信息请看这里。