【发布时间】:2021-01-27 16:55:38
【问题描述】:
我需要你的帮助来解决一个棘手的问题。 我有一张如下的地图
Map<Integer, String> ruleMap = new HashMap<>();
ruleMap.put(1, "A");
ruleMap.put(12, "Test - 12");
ruleMap.put(1012, "Test Metadata 12 A");
我有一个规则,我在其中分离 id 并将它们收集到一个列表中。通过遍历列表,我将其 id 替换为 map 中的相应值。
代码:
String rule = "1 AND 12 OR 1012 AND 12 or 1012";
List < String > idList = new ArrayList < > ();
Pattern p = Pattern.compile("[0-9]+");
Matcher m = p.matcher(rule);
while (m.find()) {
idList.add(m.group());
}
for (String id: idList) {
if (ObjectUtils.isNonEmpty(ruleMap.get(Integer.parseInt(id)))) {
rule = rule.replaceFirst(id, ruleMap.get(Integer.parseInt(id)));
}
}
System.out.println(rule);
我得到这样的输出 -
A AND Test - Test - 12 OR Test Metadata 12 A AND 12 or Test Metadata 12 A
如您所见,id 12 的第一次迭代替换了其尊重的值,但在第二次出现 id 12 时,将值 Test - 12 替换为 Test - Test - 12。
那么谁能帮我解决这个问题?
【问题讨论】: