我正在开发能够计算任何给定数学表达式差异的java程序。
当用户键入表达式Sin(Cos(x^2))
时,我需要检查它是否在数学上有效。
当然,我们可以通过手动编写代码来完成,但这将是繁琐的工作。
我可以使用java的正则表达式包吗?
如何??
感谢名单..
答案 0 :(得分:10)
不,正则表达式还不够......(事实上,这可以通过数学证明)。
要解析数学表达式,您可以编写自己的解析器(实际上并不那么难)或使用现有的解析器,例如Jep。
以下是解析数学表达式的一些以前的SO问题:
Best algorithm for evaluating a mathematical expression?
答案 1 :(得分:6)
JEval是一个不错的选择,因为JEP现在已获得商业许可。
答案 2 :(得分:2)
答案 3 :(得分:2)
如果您想自己编码,那么您可以使用广泛用于此目的的Polish notation。
答案 4 :(得分:1)
答案 5 :(得分:0)
计算机代数系统(例如Mathematica)使用如下的规则符号来区分:
D[Cos[x_],y_]:=(-1)*Sin[x]*D[x,y]
D[Sin[x_],y_]:=Cos[x]*D[x,y]
这些转换规则有时也被称为“模式匹配规则”,但它们与字符串的正则表达式模式匹配无关。 有关详细信息,请参阅Introduction to Patterns。
我知道这些开源Java项目,它们包含类似的模式匹配规则引擎: