从地图中转换数值中的文字表达式

时间:2016-06-21 06:42:36

标签: java string hashmap

我在下面放置了我的问题尽可能简化。 给定一个包含文字数学表达式的字符串,我希望通过将字母转换为从地图中获取值的数字来获得相同的表达式。 我在我的代码下面张贴了你们的任何帮助。

public class Prova {
    public static void main(String[] argv) {
        //mathematical expression
        String expr = "(a*b)+(b/a)";  //(15*60)+(60/15)
        //Map of numeric values
        HashMap<String, Double> itemval = new HashMap();

        itemval.put("a", 15.0);
        itemval.put("b", 60.0);

        System.out.println("itemval: " + itemval);
        System.out.println("expr: " + expr);

        //convert literal expression numerically
        char[] nc = expr.toCharArray();
        for (int t = 0; t < nc.length; t++) {
            char pippo = nc[t];
            for (String key : itemval.keySet()) {
                if (key.equals(pippo)) {
                    System.out.println("pippo: " + itemval.get(key));
                }
            }
            System.out.print(nc[t]);
        }
    }
}

我想要的是得到像(15 * 60)+(60/15)这样的输出 提前谢谢......

2 个答案:

答案 0 :(得分:0)

您可以使用String而不是char数组来进行替换。

/* expr.split("") create an arrays of string. 
 * Each String element is a character of the original string.    
 */
for (String s : expr.split("")) { 
    if (itemval.containsKey(s)) {
        expr = expr.replaceAll(s, itemval.get(s).toString());
    }
}
System.out.println(expr);

输出:(15.0 * 60.0)+(60.0 / 15.0)

如果要格式化数字而不显示.0,可以使用NumberFormat:

NumberFormat nf = NumberFormat.getNumberInstance();
for (String s : expr.split("")) {
    if (itemval.containsKey(s)) {
        expr = expr.replaceAll(s, nf.format(itemval.get(s)));
    }
}

输出:(15 * 60)+(60/15)

答案 1 :(得分:0)

import java.util.HashMap;
import java.util.Map;

public class Prova {
   public static void main(String[] argv) {
        // mathematical expression
        String expr = "(a*b)+(b/a)"; // (15*60)+(60/15)
        // Map of numeric values
        HashMap<String, Double> itemval = new HashMap();

        itemval.put("a", 15.0);
        itemval.put("b", 60.0);

        System.out.println("itemval: " + itemval);
        System.out.println("expr: " + expr);

        for (Map.Entry<String, Double> e : itemval.entrySet()) {
            expr = expr.replaceAll(e.getKey(), String.valueOf(e.getValue()));
        }

        System.out.println(expr);
    }
}

输出:

itemval: {b=60.0, a=15.0}
expr: (a*b)+(b/a)
(15.0*60.0)+(60.0/15.0)