다음 템플릿 String : "Hello [Name] Please find attached [Invoice Number] which is due on [Due Date]"
.
이름, 송장 번호 및 기한에 대한 문자열 변수도 있습니다. 템플릿의 토큰을 변수로 바꾸는 가장 좋은 방법은 무엇입니까?
(변수에 토큰이 포함 된 경우이를 대체해서는 안됩니다.)
편집하다
@laginimaineb 및 @ alan-moore 덕분에 내 솔루션은 다음과 같습니다.
public static String replaceTokens(String text,
Map<String, String> replacements) {
Pattern pattern = Pattern.compile("\\[(.+?)\\]");
Matcher matcher = pattern.matcher(text);
StringBuffer buffer = new StringBuffer();
while (matcher.find()) {
String replacement = replacements.get(matcher.group(1));
if (replacement != null) {
// matcher.appendReplacement(buffer, replacement);
// see comment
matcher.appendReplacement(buffer, "");
buffer.append(replacement);
}
}
matcher.appendTail(buffer);
return buffer.toString();
}