那你需要解析这个字符串,用Math相关的函数去计算

解决方案 »

  1.   

    好像javascript的eval好像就有这个功能。
    gogle一下,应该有类似的java实现
      

  2.   

    补充下,我找到一个bsh(Beanshell )就是玩这个的。好像是开源的吧
      

  3.   

    其实我想第一想到的是用表达式,Expression,后来去看它的jdk 的api,没有相关系的方法,后来我在想起强大的spring框架,你可以导入一个spring里面的一小小架包,springframework.expression这个架包,他的功能非常强大。不过你上面的cos这些方法最好在前面Math.cos()比较好。举个例子ExpressionParser parser = new SpelExpressionParser();
    Expression exp = parser.parseExpression("'Hello World'");
    String message = (String) exp.getValue();
    例子2
    ExpressionParser parser = new SpelExpressionParser();
    Expression exp = parser.parseExpression("new String('hello world').toUpperCase()");
    String message = exp.getValue(String.class);
    等等数学表达式也一样,希望对你有所帮助。
      

  4.   

    如果你还是不怎么会用给你一个返回数字的例子:int minusTwentyOne = parser.parseExpression("1+2-3*8").getValue(Integer.class);
    倘若还是不怎么会玩这个,你还去看看javax.script这个包下下面的东西,因为javascript有eval这个方法,java也可以用,如果不会玩,给你一个链接吧,希望对你又帮助http://gaojianqi6.iteye.com/blog/1676049加油
      

  5.   

    昨天不在,今天帮你解答吧,不好意思哟~~~1.上面给你的链接,可以用到替换变量的的方法实现你的需求的。你只要针对每个变量重新赋值,意思就是,遍历 List<MapJ> all = new ArrayList<MapJ>();  这个列表,得到每个MapJ的对象,然后判断;比如B是要的变量,那么判断if(all[i].mapj.getKey().equals("B"))你要的变量,结果all[i].setValue("xxxxx"),xxxxx为你所要设的值。然后再去调用JavaScript类的getMathValue().
    2.第二种方法就是用spring架包的。你可以把你的变量的每个属性存放到一个类中,比如你有a+b*c+d-f,那么你这些属性设置为对象的指,如public class ExpressValue {

    private String a;
    private String b;
    private String c;
    private String d;
    private String e;
    private String express=a+b+"*"+c+d+"-"+e;
    public String getA() {
    return a;
    }
    public void setA(String a) {
    this.a = a;
    }
    public String getB() {
    return b;
    }
    public void setB(String b) {
    this.b = b;
    }
    public String getC() {
    return c;
    }
    public void setC(String c) {
    this.c = c;
    }
    public String getD() {
    return d;
    }
    public void setD(String d) {
    this.d = d;
    }
    public String getE() {
    return e;
    }
    public String getExpress() {
    return express;
    }
    public void setExpress(String express) {
    this.express = express;
    }
    }
    然后调用你可以对这个类的每个属性,想赋值就复制,你比如,你想改变a值,这可以ExpressValue expressObject = new ExpressValue();然后 expressObject.setA("xxx");就可以了。但是你会问,怎么用呢。看下面
    ExpressValue expressObject = new ExpressValue();
    expressObject.setA("1");
    expressObject.setA("1");
    expressObject.setA("1");
    ExpressionParser parser = new SpelExpressionParser();
    Expression exp = parser.parseExpression("name");
    EvaluationContext context = new StandardEvaluationContext(tesla);String name = (String) exp.getValue(context);
      

  6.   

    上面怎么没有写完就发布了,bug不,好继续接上面,要修改一下东西
    ExpressValue expressObject = new ExpressValue();
    expressObject.setA("1");
    expressObject.setB("1");
    expressObject.setC("1");
    expressObject.setD("1");
    expressObject.setE("1");
    ExpressionParser parser = new SpelExpressionParser();
    Expression exp = parser.parseExpression("express");//写入你表达式的属性
    EvaluationContext context = new StandardEvaluationContext(expressObject );//把你的实例对象放入Double value = (Double) exp.getValue(context);这样你就可以得到你所用的值.希望对你有帮助~~~~
      

  7.   

    上面感觉少了一个setE(String e){this.e =e}的方法,不好意思,不知道怎么不小心删除了。