代码的一部分如下
Map<String, String> map = new HashMap();
map.put("x", "4");
map.put("y", "5");
map.put("z", "7");
map.put("d", "2");
String exp ="if(([[x]]-[[y]])>0,500,400)+[[x]]/[[z]]+(if([[y]]-[[z]]+[[z]])>0,200,100)+[[y]]+if([[x]]>0,200,100)"//这个公式只是一个示例,公式内容是通过变量传来的,其中if语句的意思是如果里面的条件为真,那么就取第一个值否则取第//二个值,如if(([[x]]-[[y]])>0,500,400),([[x]]-[[y]])>0的话,返回500否则返回400csdn的一位兄弟告诉我用 jexl.jar可以实现计算,但是我不知道该怎么解析上面这样的公式,要是能解析出来,我就能做计算了,到时候,把整个代码贴出来共享……

解决方案 »

  1.   

    问题补充,其中的[[x]]要转换为map中对应x的值,比如4
      

  2.   

    输出: if((4-5)>0,500,400)+4/7+(if(5-7+7)>0,200,100)+5+if(4>0,200,100)import java.util.HashMap;
    import java.util.Map;public class Test {
    public static void main(String[] args) {
    Map<String, String> map = new HashMap<String, String>();
    map.put("x", "4");
    map.put("y", "5");
    map.put("z", "7");
    map.put("d", "2");
    String exp = "if(([[x]]-[[y]])>0,500,400)+[[x]]/[[z]]+(if([[y]]-[[z]]+[[z]])>0,200,100)+[[y]]+if([[x]]>0,200,100)"; for (String key : map.keySet()) {
    String value = map.get(key);
    exp = exp.replaceAll(key, value);
    }

    exp = exp.replaceAll("\\[\\[(\\d+)\\]\\]", "$1");
    System.out.println(exp);
    }
    }
      

  3.   

    谢谢inhibitory ,这个表达式,我也刚才获得了,问题是,我如何能获得这个公式的值呢