动态替换某些字符串的值

时间:2017-10-09 16:17:10

标签: java string

我有HashMap<Integer, Double>,看起来像这样: {260 = 223.118,50,261 = 1889,00,262 = 305,70,270 = 308,00}

从数据库中我得到一个看起来像这样的字符串: 字符串结果=“(260 + 261) - (262 + 270)”;

我想用值更改字符串的值260,261,262 ...(它们与HashMap的键总是一样),所以我可以得到一个字符串: String finRes =“(223.118,50 + 1889,00) - (305,70 + 308,00)”;

字符串结果也可以包含乘法和除法字符。

2 个答案:

答案 0 :(得分:1)

这里的一个简单的正则表达式解决方案是将输入字符串与模式(\d+)匹配。这应该产生算术字符串中的所有整数。然后,我们可以在地图中查找每个匹配,转换为整数,以获得相应的double值。由于所需的输出又是一个字符串,我们必须将double转换回字符串。

Map<Integer, Double> map = new HashMap<>();
map.put(260, 223.118);
map.put(261, 1889.00);
map.put(262, 305.70);
map.put(270, 308.00);

String input = "(260+261)-(262+270)";
String result = input;
String pattern = "(\\d+)";

Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(input);
StringBuffer sb = new StringBuffer();

while (m.find()) {
    m.appendReplacement(sb, String.valueOf(map.get(Integer.parseInt(m.group(1)))));
}
m.appendTail(sb);
System.out.println(sb.toString());

<强>输出:

(223.118+1889.0)-(305.7+308.0)

在这里演示:

Rextester

答案 1 :(得分:0)

这是一个解释的解决方案:

    // your hashmap that contains data
    HashMap<Integer,Double> myHashMap = new HashMap<Integer,Double>();
    // fill your hashmap with data ..
    ..
    // the string coming from the Database
    String result = "(260+261)-(262+270)";
    // u will iterate all the keys of your map and replace each key by its value
    for(Integer n : myHashMap.keySet()) {
        result = result.replace(n,Double.toString(myHashMap.get(n)));
    }
    // the String variable 'result' will contains the new String 

希望有所帮助:)