如前所述,您将丢弃结果,并且 replace 不需要正则表达式,只需替换文字字符序列,因此您无需在分隔符中转义
但 replaceAll 和 replaceFirst 确实采用正则表达式字符串(设计不好)
顺便说一句,建议使用Patter.quote(String) 和Matcher.quoteReplacement(String) 以确保在使用正则表达式时不会发生奇怪的事情(它更容易一些,并确保在转义字符时没有错误)
这里只适用于必须替换一次的情况
String delimiter = "**";
String html = "<html><head></head><body>**USERNAME** AND **PASSWORD**</body></html>";
Map<String, String> mp = new HashMap<String, String>();
mp.put("USERNAME", "User A");
mp.put("PASSWORD", "B");
for (Map.Entry<String, String> entry : mp.entrySet()) {
html = html.replace(delimiter + entry.getKey()+ delimiter, entry.getValue());
}
这是用于必须替换多个匹配项的情况
String delimiter = "**";//unescaped because I'm handling that in my replace
String html = "<html><head></head><body>**USERNAME** AND **PASSWORD**</body></html>";
Map<String, String> mp = new HashMap<String, String>();
mp.put("USERNAME", "User A");
mp.put("PASSWORD", "B");
for (Map.Entry<String, String> entry : mp.entrySet()) {
html = html.replaceAll(Pattern.quote(delimiter + entry.getKey()+ delimiter), Matcher.quoteReplacement(entry.getValue()));
}