From 24b5b6012ad0c8d3f54e73eb90d35253e59f865a Mon Sep 17 00:00:00 2001 From: jaysunxiao Date: Sun, 17 Aug 2025 17:19:54 +0800 Subject: [PATCH] feat: render placeholder in string template like JavaScript --- .../com/zfoo/protocol/util/StringUtils.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/protocol/src/main/java/com/zfoo/protocol/util/StringUtils.java b/protocol/src/main/java/com/zfoo/protocol/util/StringUtils.java index 145713df..433d88bb 100644 --- a/protocol/src/main/java/com/zfoo/protocol/util/StringUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/util/StringUtils.java @@ -16,6 +16,7 @@ import com.zfoo.protocol.collection.ArrayUtils; import java.nio.charset.Charset; import java.util.*; +import java.util.regex.Matcher; import java.util.regex.Pattern; /** @@ -468,6 +469,23 @@ public abstract class StringUtils { return builder.toString(); } + /** + * 格式化字符串,类似JavaScript的占位符${name}替换 + */ + public static String render(String template, Map params) { + var pattern = Pattern.compile("\\$\\{(\\w+)\\}"); + var matcher = pattern.matcher(template); + var sb = new StringBuffer(); + + while (matcher.find()) { + var key = matcher.group(1); + var replacement = params.getOrDefault(key, ""); + matcher.appendReplacement(sb, Matcher.quoteReplacement(replacement)); + } + matcher.appendTail(sb); + return sb.toString(); + } + public static boolean isEnglishChar(char ch) { return ENGLISH_SET.contains(ch); }