您好我经常开发JTableModels,其中一些单元格必须包含适用某个简单数学公式的结果。这个公式可以有:
我经常解决它制作一个小的计算器类来解析公式,我定义了哪种语法。计算器类使用堆栈进行计算,语法总是使用波兰表示法。
但是对于我和我的用户来说,波兰语符号是不自然的。所以我的问题是......
是否存在一个运行在1.5 jvm中的lib并且可以处理我的requeriments并使用常规表示法(带括号,我不知道这种表示法的名称)公式?
P.D假设公式总是语法正确,我可以预处理不是常量的数字来提供它们的值
答案 0 :(得分:3)
您是否考虑过JSR-223的好处?简而言之,这个规范allows Java developers很容易整合dynamic languages and their parsers。使用这样的解析器,您需要定义解析器转换为定义internal DSL的需要,这解析为创建一个好的API,并让您的用户选择他们更喜欢Javascript / Groovy / Scala / WTF语法他们发生更喜欢。
答案 1 :(得分:1)
尝试JEP。
您可以为解析器定义新变量,因此它可以包含引用名称,例如“INTEREST_RATE”。但是您必须事先定义它。
对于单元格引用,您必须提取数字并相应地编辑表达式,或者可能有一些我还不知道的选项。
答案 2 :(得分:0)
如果您不能使用Java 6及其脚本支持,那么请查看Apache Bean Scripting Framework(BSF)。从该页面:
... BSF 3.x将在Java 1.4+上运行,允许访问Java 1.4和Java 1.5的JSR-223脚本。
答案 3 :(得分:0)
我根据Dijkstra's Shunting Yard的条款发布了基于Apache License 2.0算法的表达式评估程序:
答案 4 :(得分:0)
有一个名为formula4j的商业工具可能对某些人有用。
它对细胞参考没有直接帮助。您必须自己处理这些,并将单元格引用转换为值。