日期:2014-05-20  浏览次数:20744 次

关于Map替换得思路
本帖最后由 u011402153 于 2013-09-17 17:30:14 编辑
我得问题如下:首先我已经得到一个数组这个数组其实就是一个字符串算式转换而来,但是值是中文
如:客户员工数量+实施月份。。。。 等
现在我已经有一个Map集合 在这个集合中 key为上面得元素(如:客户员工数量) value就是该元素得值(如:100)
现在不知道怎么把这个数组转换成为一个可以解出来得式子并得出值
我个人得想法如下:首先循环让集合中元素和Map集合中的key进行比较  如果相同 则把集合中得元素替换为Map集合得Value。 如果碰到运算符我该怎么去判断呢?如果得出来了一个集合我把它再转换为String字符串再转换为double类型进行计算?
下面是我已经写好得代码 希望给出代码或者思路 谢谢!

Set keys = (Set) map.keySet();
Iterator iterator = (Iterator) keys.iterator();
String[] item1 = tcaas12.getItem1().split(",");//获得String数组
for (int j = 0; j < item1.length; j++) {
//解析  如果数组item1中得某个元素和给我得Map得Key相等  就把那个元素换成 Map得Value
if(item1[i].trim().equals(iterator.next().toString().trim())){
value = (Double) map.get(item1[i]);//得到对应得值
ecc.setImpNum(value);

item1[i] =String.valueOf(value);
}
}
java iterator map string

------解决方案--------------------
楼主是想在替换前验证 客户员工数量 输入是否正确?

按照楼主得思路去实现的话应该可以的
------解决方案--------------------
写了一段,仅供参考。

        StringBuilder builder = new StringBuilder();
        Map<String, Integer> map = new HashMap<String, Integer>();
        map.put("a", 2);
        map.put("b", 3);
        String[] items = new String[]{"a", "-", "b"};
        for (String item : items) {
            item = item.trim();
            if (item.length() == 1 && "+-*/()".indexOf(item) != -1) {
                builder.append(item);
            } else if (map.containsKey(item)) {
                builder.append(map.get(item));
            } else {
                builder = new StringBuilder();
                System.out.println(item + "没有对应的值");
                break;
            }
        }
        String exp = builder.toString();
        if (!exp.isEmpty()) {
            ScriptEngineManager manager = new ScriptEngineManager();
            ScriptEngine engine = manager.getEngineByName("JavaScript");
            try {
                System.out.println((int) Float.parseFloat(engine.eval("eval ('" + exp + "')").toString()));
            } catch (ScriptException ex) {
                System.err.println("错误的表达式:" + exp);
            }
        }