目前,我使用一些以字符串形式给出的逻辑和数学表达式。不幸的是,在使用字符时,需要在表达式上使用方括号:'&'和'|'(用于代替'||')。
有效表达式:
(x + 2) & (y * 4) | (i - 4)
(5 > 4) | (6y + 4)
无效的表达式:
x + 2 & y * 4 | i - 4
5 > 4 | 6y + 4
我试图用RegEx检查String,就像这样:
[)][ \t\n\r]*[&][ \t\n\r]*[(]
很有意义。
问题是:如何找到所有'&'和'|'字符并找到近括号?
编辑:我有一个解决方案,该方法基于搜索这些字符的索引,然后同时使用两种方法并查找方括号。也许我可以使用RegEx以更简单的方式做到这一点?
答案 0 :(得分:0)
相对简单的解决方案:
&
和|
上分开; (
开头并以)
结尾。代码段:
String s = "(x + 2) & (y * 4) | (i - 4)";
boolean valid = Arrays.stream(s.split("[&|]"))
.map(String::trim)
.allMatch(p -> p.startsWith("(") && p.endsWith(")"));
如果您需要处理的问题比问题中提出的更为复杂(嵌套表达式等),则需要编写解析器。