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

解决方案 »

  1.   

    想偷懒吗? 组合成SQL 语句 丢数据库执行下,Access也可以。
      

  2.   

    只有自己实现一个方法了,先将这类表达式转换成逆波兰式表达式,再使用栈进行计算,实现起来是有一定难度的,特别是其中还夹杂着冪、乘、除、括号等有先后运算顺序的运算符。可以参考以下的一些文档:http://www.ibm.com/developerworks/cn/java/l-expression/index.html
    http://www.ibm.com/developerworks/cn/java/j-w3eva/index.html
      

  3.   

    http://www.hendriklipka.de/java/funcpars.html
    http://parser.softalizer.com/
      

  4.   

    组合成SQL 语句 丢数据库执行下,Access也可以。
    ==========================================
    强!
      

  5.   

    常见的递归下降解释器,或者使用一些语法分析生成器,比如javacc,antlr等
      

  6.   

    java6继承rhino,转成javascript,直接eval也行,或者如上面所说的调用beanshell
    、ruby之类的脚本来eval
      

  7.   

    想偷懒吗? 组合成SQL 语句 丢数据库执行下,Access也可以。
    ======================================================
    学习
      

  8.   

    java6继承rhino,转成javascript,直接eval也行,或者如上面所说的调用beanshell
    、ruby之类的脚本来eval
    =================================================
    没学过
      

  9.   

    具体大致有2种方法 4楼 已经说了一种了还有我以前好象做过另一种 是用的c++ 还利用词法分析原理 对错误的表达式有提示
    http://blog.sina.com.cn/fengyehongpiao 去看看就知道了
      

  10.   


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

  11.   

    http://blog.csdn.net/CrazyGou/archive/2007/06/10/1646246.aspx
      

  12.   

    print "计算器,输入q退出\n";
    while(<>){
    $i=$_;
    chomp($i);
    unless($i){
    next;
    }
    if($i =~ m/q/i){
    last;
    }
    $o=eval($i);
    print "Answer = $o \n";
    }执行结果:mo@ubuntu:~/Desktop$ perl calc
    计算器,输入q退出
    (3+5)*20/5^8-90
    Answer = 4294967182
    Perl些的,JavaScript也有类似的eval函数,可以直接执行字符串表达式,不过Java里有没有还真的不知道
      

  13.   

    想偷懒吗? 组合成SQL 语句 丢数据库执行下,Access也可以。这个强啊 这个思路要记住 呵呵
      

  14.   

    想偷懒吗?   组合成SQL   语句   丢数据库执行下,Access也可以。 
     学习,谢谢!