【问题标题】:Converting String objects into Equations将字符串对象转换为方程式
【发布时间】:2013-09-24 02:45:48
【问题描述】:

我正在处理java program,我希望它完成的任务之一是将用户给定的输入转换为程序将解决的方程。例如“(10 + 5 / 3) 2 - 3 (10 * (8 ^ 4))”。它必须能够求解中等教育水平方程,因此需要指数、指数符号,甚至可能需要变量求解。

我查看了 stackoverflow,发现了两个东西,第三方 API 和 ScriptEngine。

我在这两个方面都有问题,因为我不想使用任何第三方 API 和脚本引擎的 eval() 函数,至少就我所阅读和理解的内容而言,它的功能有限。

还有其他的原生 API 可以做这样的事情吗?我错过了什么技巧?

所以,回顾一下,我想要一些 Java 原生的东西,而不是脚本引擎,它可以解决中等教育水平的方程式和表达式。

【问题讨论】:

  • 听起来像是一个雄心勃勃且回报丰厚的冒险!您对自己实际编写程序感兴趣吗?如果是这样,也许开始用文字写下你是如何解决(10 + 5 / 3) 2 - 3 (10 * (8 ^ 4))的。
  • ANTLR 可能有用:antlr.org(但可能不如自己解析表达式有趣 ;-)
  • 如果我必须开始编写自己的字符串解析器,那我会的,但是重新发明轮子有什么意义,我可能找不到。

标签: java swing expression equation scriptengine


【解决方案1】:

..例如“(10 + 5 / 3) 2 - 3 (10 * (8 ^ 4))”。 ..

尝试访问此ScriptEngine demo...

我查看了 stackoverflow,发现了两个东西,第三方 API 和 ScriptEngine

我对这两个都有问题,因为我不希望使用任何第三方 API 和脚本引擎的 eval() 函数,至少就我所阅读和理解的内容而言,它的功能有限

这种理解是错误的。


另见

使用ScriptEngine 的示例。

  1. EvaluateString.java

  1. SwingCalculator.java(因为太漂亮了)

=

【讨论】:

    【解决方案2】:

    Java 内置 (javax.script.*) JavaScript 引擎:

    它可以让你解出这样的方程。

    【讨论】:

    • OP 不想使用脚本引擎。
    • @dnault,但这是内置的。否则他会有大量的字符串解析、替换等工作。不想使用脚本引擎只是意味着OP想玩编程,而不是解决任务。所以我只是把这个答案给其他访客。
    • 它是否支持指数、指数符号和指数?如果是这样 - 我可能会考虑使用它,如果不是,我什至不会碰它。我还提到我不想使用脚本引擎。如果我必须开始编写自己的字符串解析器,那我会的,但是重新发明轮子的意义何在,我可能找不到。
    • @Michaelwm,有很多数学 JavaScript 库,可以用数学来解决问题。就这个引擎而言,它支持 javascript 标准——大部分都应该可以工作。仅供参考,在 javascript 指数符号中可以开箱即用。
    • @Michaelwm,编写这样的解析器是每个程序员一生都应该做的事情之一。很多天前我写过这样一篇。
    猜你喜欢
    • 2014-01-14
    • 2011-08-02
    • 2016-06-10
    • 2022-01-20
    相关资源
    最近更新 更多