Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.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 - Fatal编程技术网

Java 设置表达式字符串的优先级

Java 设置表达式字符串的优先级,java,string,Java,String,我有下面的表达式,我想为Java中的每个条件设置括号“()”。我想转换下面的表达式 String expression = "((firstname = john AND Lastname = Eleven) OR (salary = 15000 AND location = Mexico OR (firstname = mathew AND lastname = Thirteen)))"; 作为 有没有最好的实现方法?如果要实现的是添加括号,可以创建一个正则表达式来匹配text[space]

我有下面的表达式,我想为Java中的每个条件设置括号“()”。我想转换下面的表达式

String expression = "((firstname = john AND Lastname = Eleven) OR (salary = 15000 AND location = Mexico OR (firstname = mathew AND lastname = Thirteen)))";
作为


有没有最好的实现方法?

如果要实现的是添加括号,可以创建一个正则表达式来匹配
text[space]=[space]text
,然后使用
String\replaceAll()
方法将其包装在括号中。可以使用此正则表达式实现匹配:
(\w+=\w+


如果您不需要匹配符号,而需要匹配其他运算符,则可以对正则表达式进行增强,以包括
=
。=|我建议您编写一些代码。这(对我来说)不是很清楚。你有一个字符串,其中有一个未知语言的表达式,你问我们如何“实现”它。是的。我建议您查找Dijkstra分流场算法或“递归下降表达式解析”。您还需要一个词法分析器作为您最终使用的任何解析器的前端…注意,多余的括号没有任何用处。这里真正需要的是观察正确的运算符优先级。有一种广泛但荒谬的说法,即表达式解析器“插入缺少的括号”。他们不做任何类似的事情。问题是关于运算符优先级的,而这并不能以任何方式解决它。通常当回答说“试试这个”,这意味着它还没有经过测试。也许对你的答案更有信心是有益的。正则表达式不能处理运算符优先级。这一点在1956年得到了证实。重新编辑,1956年证明正则表达式不能处理运算符优先级。你的建议完全是错误的技术。很明显,你既没有尝试过,也没有研究过。
String expression = "(((firstname = john) AND (Lastname = Eleven)) OR ((salary = 15000) AND (location = Mexico) OR ((firstname = mathew) AND (lastname = Thirteen))))";
String expression = "((firstname = john AND Lastname = Eleven) OR (salary = 15000 AND location = Mexico OR (firstname = mathew AND lastname = Thirteen)))";
String replaceAll = expression.replaceAll("(\\w+ = \\w+)", "($1)");
System.out.println(replaceAll);
//(((firstname = john) AND (Lastname = Eleven)) OR ((salary = 15000) AND (location = Mexico) OR ((firstname = mathew) AND (lastname = Thirteen))))