参考:java模板字符串解析(占位符解析)
【最常用】两种java中的占位符的使用
Java中强大的format
java模板替换_java替换字符串模板(模板渲染)
第一种:使用%s占位,使用String.format转换
public class Test {
public static void main(String[] args) {
String url = "我叫%s,今年%s岁。";
String name = "小明";
String age = "28";
url = String.format(url,name,age);
System.out.println(url);
}
}
第二种:使用{1}占位,使用MessageFormat.format转换
public class Test {
public static void main(String[] args) {
String url02 = "我叫{0},今年{1}岁。";
String name = "小明";
String age = "28";
url02 = MessageFormat.format(url02,name,age);
System.out.println(url02);
}
}
第三种:自定义模版字符串解析
@Test
public void test() {
String aa = "我们都是好孩子,${name1}说是嘛: 我觉得${name2}是大聪明!";
Map<String, String> map = MapUtils.newHashMap();
map.put("name1", "小花");
map.put("name2", "小明");
// 输出:我们都是好孩子,小花说是嘛: 我觉得小明是大聪明!
log.info(TjStringUtils.templateString(aa, map));
}
package com.tj.demo.utils;
import lombok.extern.slf4j.Slf4j;
import java.util.Map;
@Slf4j
public abstract class TjStringUtils {
/**
* 前站位符号: "${"
*/
public static final String PLACEHOLDER_PREFIX = "${";
/**
* 后站位符: "}"
*/
public static final String PLACEHOLDER_SUFFIX = "}";
/**
* JAVA模版字符串
*
* @param template 模版,里面的需要替换的部分使用${变量名}站位
* @param parameter map集合,里面是变量名和值
* @return
*/
public static String templateString(String template, Map<String, String> parameter) {
if (parameter == null || parameter.isEmpty()) {
return template;
}
StringBuffer buf = new StringBuffer(template);
int startIndex = buf.indexOf(PLACEHOLDER_PREFIX);
while (startIndex != -1) {
int endIndex = buf.indexOf(PLACEHOLDER_SUFFIX, startIndex + PLACEHOLDER_PREFIX.length());
if (endIndex != -1) {
String placeholder = buf.substring(startIndex + PLACEHOLDER_PREFIX.length(), endIndex);
int nextIndex = endIndex + PLACEHOLDER_SUFFIX.length();
try {
String propVal = parameter.get(placeholder);
if (propVal != null) {
buf.replace(startIndex, endIndex + PLACEHOLDER_SUFFIX.length(), propVal);
nextIndex = startIndex + propVal.length();
} else {
log.info("无法解析占位符'" + placeholder + "' in [" + template + "] ");
}
} catch (Exception ex) {
log.info("无法解析占位符'" + placeholder + "' in [" + template + "]: " + ex);
}
startIndex = buf.indexOf(PLACEHOLDER_PREFIX, nextIndex);
} else {
startIndex = -1;
}
}
return buf.toString();
}
}