有没有可以把例如这样的东西
String s="1*2-3+5*6/2";
直接转换为结果的类库?或者是找一种最简单的方法来算类似这样的表达式。

解决方案 »

  1.   

    应该 没有.. , 不过你在个只能 用for循环 得到每个字节
    然后判断是否为数字,最后在运算, 很麻烦
      

  2.   

    这个应该没有现成的,数据结构讲栈的一章里,还有编译原理里讲到了算符优先算法,
    如果你想解析表达式,可以考虑使用那个算法,我只用C#和C++实现过,没有Java版的
      

  3.   

    Java好像没有提供类似于eval的方法。
    不过Javascript倒是有
    JDK6:import javax.script.ScriptEngine;
    import javax.script.ScriptEngineManager;public class EvalTest { public static void main(String[] args) throws Exception {
    System.out.println(eval("1*2-3+5*6/2"));
    } public static Object eval(String str) throws Exception {
    ScriptEngineManager factory = new ScriptEngineManager();
    ScriptEngine eng = factory.getEngineByName("javascript");
    return eng.eval(str);
    }
    }
      

  4.   

    下面的例子不要求jdk1.6以上,不过要添加bsf.jar,js.jar,commons_logging.jar
    import org.apache.bsf.BSFException;
    import org.apache.bsf.BSFManager;
    public class Javascript {
    public static void main(String[] args) {
    BSFManager bsfmgr = new BSFManager();
    try {
    String s ="2*3+11-6/3";
    Object obj=bsfmgr.eval("javascript","",0,0,s);
    System.out.println(obj);
    } catch (BSFException e) {
    e.printStackTrace();
    }
    }}