参考: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);}}
第三种:自定义模版字符串解析
@Testpublic 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;@Slf4jpublic 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();}}
