求助:JAVA字符串转换为表达表
本人国为工作方面需要,想把字符串转换为表达式,比较A=Cos(4B)*sin(2C)+H/L,如果Cos(4B)*sin(2C)+H/L为字符串形式,怎样把它转换成表达式并计算,并且把里面的变量获取出来,随时进行更改计算。我写的Cos(4B)*sin(2C)+H/L只是个随便写的一个字符串,这个字符串(或者说表达式)是随意的。求高手们帮助怎么写,最好有写个样本出来,谢谢了。
[解决办法]
昨天不在,今天帮你解答吧,不好意思哟~~~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);