java - 替换占位符
像模版引擎一样,替换字符串中的 ${} 占位符,好处就是使用原生的API,不需要额外导包了。
public class A{
private static final String BRACE_LEFT = "{";
private static final String BRACE_RIGHT = "}";
private static final String $ = "$";
/**
* 替换字符,占位符限定 ${}
*
* @param tmp 代码模版
* @param params 参数
* @return PreparedSql
*/
public static String processMap(@NotNull String tmp, Map<String, ?> params) {
StringTokenizer tokenizer = new StringTokenizer(tmp, "${}", true);
StringBuilder res = new StringBuilder(tmp.length());
String token;
boolean escaped = false;
while (tokenizer.hasMoreTokens()) {
token = tokenizer.nextToken();
if (escaped) {
if ($.equals(token) || BRACE_LEFT.equals(token)) {
//占位符中出现美元符或者花括号
throw new IllegalArgumentException("Contain invalid char: " + token);
} else if (BRACE_RIGHT.equals(token)) {
//标志复位
escaped = false;
} else {
//参数名占位符
res.append(Converter.toString(params.get(token)));
}
} else {
if ($.equals(token)) {
token = tokenizer.nextToken();
if (BRACE_LEFT.equals(token)) {
//检索到 '${' 开始尝试获取参数名
escaped = true;
} else {
//'$'独立出现的场景
res.append($).append(token);
}
} else {
//普通字符
res.append(token);
}
}
}
return res.toString();
}
}
疯狂的妞妞 :每一天,做什么都好,不要什么都不做!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
2019-06-08 mysql - 交互式和非交互式
2018-06-08 java扫描包