替换等式中的未知变量

时间:2015-02-16 07:57:42

标签: java string variables math evaluation

所以我们有:

    String test2 = "12+x+43+y+32-100";
    Map<String, String> values = new HashMap<String, String>();
    values.put("x", "3");
    values.put("y", "7");

    for (String key : values.keySet()) {
        if (test2.contains(key)) {
            String result = test2.replaceAll(key, values.get(key));
            System.out.println(result);
        }
    }

输出:

  

12 + 3 + 43 + Y + 32-100

     

12 + X + 43 + 7 + 32-100

虽然它应该是:

  

12 + 3 + 43 + 7 + 32-100

3 个答案:

答案 0 :(得分:1)

result替换为test2

            test2= test2.replaceAll(key,values.get(key));
            System.out.println(test2);

如果你在每次运行中创建一个新变量result,你会得到一个新的字符串,其中只有一个变量被补充

答案 1 :(得分:0)

在你的for循环中,找到x后,它被替换为3.然后打印出来 12 + 3 + 43 + Y + 32-100 然后再次循环检查字母。然后它找到y并用7替换。但是前一个变量x不会受到影响。因此,将打印12 + x + 43 + 7 + 32-100。

答案 2 :(得分:0)

Java String对象是不可变的。方法replaceAll()返回一个新的String对象,并应用了操作,并且test2对象不变。

因此,您必须在结果对象中应用新修改,或者使用返回的对象重新分配test2对象。

for (String key : values.keySet()) {
    if (test2.contains(key)) {
        test2 = test2.replaceAll(key, values.get(key));
        System.out.println(test2);
    }
}