日期:2014-05-20  浏览次数:20869 次

java怎样计算一个String类型的数学表达式?
java怎样计算一个String类型的数学表达式?比如(3+5)*20/5^8-90.

------解决方案--------------------
自己写一个方法来拆分
------解决方案--------------------
想偷懒吗? 组合成SQL 语句 丢数据库执行下,Access也可以。
------解决方案--------------------
只有自己实现一个方法了,先将这类表达式转换成逆波兰式表达式,再使用栈进行计算,实现起来是有一定难度的,特别是其中还夹杂着冪、乘、除、括号等有先后运算顺序的运算符。

可以参考以下的一些文档:

http://www.ibm.com/developerworks/cn/java/l-expression/index.html
http://www.ibm.com/developerworks/cn/java/j-w3eva/index.html
------解决方案--------------------
晕 好像要自己写函数解析这个表达式才可以
------解决方案--------------------
有一些公式解析软件可以采用,找找看
------解决方案--------------------
http://www.hendriklipka.de/java/funcpars.html
http://parser.softalizer.com/
------解决方案--------------------
组合成SQL 语句 丢数据库执行下,Access也可以。
==========================================
强!
------解决方案--------------------
用beanshell吧
------解决方案--------------------
常见的递归下降解释器,或者使用一些语法分析生成器,比如javacc,antlr等
------解决方案--------------------
java6继承rhino,转成javascript,直接eval也行,或者如上面所说的调用beanshell
、ruby之类的脚本来eval
------解决方案--------------------
继承=》集成
------解决方案--------------------
动态编译
------解决方案--------------------
想偷懒吗? 组合成SQL 语句 丢数据库执行下,Access也可以。
======================================================
学习
------解决方案--------------------
java6继承rhino,转成javascript,直接eval也行,或者如上面所说的调用beanshell
、ruby之类的脚本来eval
=================================================
没学过。。。
------解决方案--------------------
拆开,写个函数,就是麻烦了点
------解决方案--------------------
antlr
------解决方案--------------------
具体大致有2种方法 4楼 已经说了一种了还有我以前好象做过另一种 是用的c++ 还利用词法分析原理 对错误的表达式有提示
http://blog.sina.com.cn/fengyehongpiao 去看看就知道了
------解决方案--------------------
o
------解决方案--------------------
可以使用编绎原理中的LR语法分析实现,也可以使用栈来实现也可以。
------解决方案--------------------
正则表达式 split
------解决方案--------------------
学习
------解决方案--------------------

------解决方案--------------------

想偷懒吗? 组合成SQL 语句 丢数据库执行下,Access也可以。
==================================
正解 方便实用 我也是这么做的 要不分解起来太麻烦

------解决方案--------------------
http://blog.csdn.net/CrazyGou/archive/2007/06/10/1646246.aspx
------解决方案--------------------
print "计算器,输入q退出\n ";