我有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)”;
字符串结果也可以包含乘法和除法字符。
答案 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)
在这里演示:
答案 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
希望有所帮助:)