验证java中的数学变量表达式

验证java中的数学变量表达式,java,Java,这是验证数学变量表达式的好方法。我们是否可以使用堆栈或正则表达式 我和你一起去了 注意:表达式不包含括号。 例如: 有效期: x+3-y/2 x+y 2+4+e 无效: x++4+8 e-3r e+r34- 如何验证上述表达式?我需要验证用户在java中提供的数学表达式输入如果不允许使用括号(即嵌套表达式),可以使用简单的正则表达式进行验证: final Pattern pattern = Pattern.compile("([0-9]+|[a-z]+)([-+*/]([0-9]+|[a

这是验证数学变量表达式的好方法。我们是否可以使用堆栈或正则表达式

我和你一起去了

注意:表达式不包含括号。 例如:

有效期:

  • x+3-y/2
  • x+y
  • 2+4+e
无效:

  • x++4+8
  • e-3r
  • e+r34-

如何验证上述表达式?我需要验证用户在java中提供的数学表达式输入

如果不允许使用括号(即嵌套表达式),可以使用简单的正则表达式进行验证:

final Pattern pattern = Pattern.compile("([0-9]+|[a-z]+)([-+*/]([0-9]+|[a-zAZ]+))*");

for (String s : Arrays.asList("123", "x+3-y/2", "x+y", "2+4+e", "x++4+8", "e-3r", "e+r34-", "---x+3-y/2")) {
    System.out.format("%5s %s\n", pattern.matcher(s).matches(), s);
}
输出是

 true 123
 true x+3-y/2
 true x+y
 true 2+4+e
false x++4+8
false e-3r
false e+r34-
false ---x+3-y/2

一种选择是使用堆栈,就像使用反向波兰符号一样。顺便说一句,
x++4+8
如果接受作为增量运算符的
++
,则它不是无效的。这与Java有什么关系?我需要验证用户在Java中提供的数学表达式输入是否可以包含圆括号?x++4+8不是正确的数学表达式。是的,java可以考虑一个增量运算符,但是我们需要验证数学表达式,谢谢KGrGGy。这个答案对我开始分析很有帮助。我能知道哪一个更适合使用堆栈还是与正则表达式一起使用吗?有什么想法吗?当允许嵌套表达式时,基于堆栈的解决方案失败了,但由于情况并非如此,正则表达式的解决方案要简单得多。@Aroniana正如我们从示例中看到的,一元“+”是不允许的,因此,可能,一元'-'也不应该被支持。@Aroniana这很奇怪。我向测试集添加了
--x+3-y/2
,得到了
false
,正如预期的那样。