gpt4 book ai didi

java字符串替换字符

转载 作者:行者123 更新时间:2023-12-03 21:45:47 24 4
gpt4 key购买 nike

我需要你的帮助来解决一个棘手的问题。
我有一个 map 像下面

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 1 时2 替换了值 Test - 12Test - Test - 12 .
那么有人可以帮我解决这个问题吗?

最佳答案

您需要使用正确的单词边界进行正则表达式替换。我建议使用正则表达式迭代器(正如您已经在做的那样),但使用模式 \b\d+\b只匹配完整的数字字符串。然后,在每次匹配时,在规则映射中查找(如果存在数字)以找到替换值。使用 Matcher#appendReplacement随着您的进行,构建替换字符串。

Map<String, String> ruleMap = new HashMap<>();
ruleMap.put("1", "A");
ruleMap.put("12", "Test - 12");
ruleMap.put("1012", "Test Metadata 12 A");

String rule = "1 AND 12 OR 1012 AND 12 or 1012";

Pattern pattern = Pattern.compile("\\b\\d+\\b");
Matcher m = pattern.matcher(rule);
StringBuffer buffer = new StringBuffer();

while(m.find()) {
if (ruleMap.containsKey(m.group(0))) {
m.appendReplacement(buffer, ruleMap.get(m.group(0)));
}
}

m.appendTail(buffer);

System.out.println(rule + "\n" + buffer.toString());
这打印:
1 AND 12 OR 1012 AND 12 or 1012
A AND Test - 12 OR Test Metadata 12 A AND Test - 12 or Test Metadata 12 A

关于java字符串替换字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64333751/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com