在字符串中找到一些数学逻辑时验证括号的存在

时间:2019-05-29 06:28:46

标签: java string parsing

目前,我使用一些以字符串形式给出的逻辑和数学表达式。不幸的是,在使用字符时,需要在表达式上使用方括号:'&''|'(用于代替'||')。

有效表达式:

(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以更简单的方式做到这一点?

1 个答案:

答案 0 :(得分:0)

相对简单的解决方案:

  1. &|上分开;
  2. 修剪所有子表达式;
  3. 检查它们是否都以(开头并以)结尾。

代码段:

String s = "(x + 2) & (y * 4) | (i - 4)";

boolean valid = Arrays.stream(s.split("[&|]"))
                      .map(String::trim)
                      .allMatch(p -> p.startsWith("(") && p.endsWith(")"));

如果您需要处理的问题比问题中提出的更为复杂(嵌套表达式等),则需要编写解析器。