public static void main(String[] args) throws Throwable { String value = "${name1}**sadas${job2}asda${date3}"; Map<String, String> map = new HashMap<>(); map.put("${name1}", "NAME1"); map.put("${job2}", "JOB2"); map.put("${date3}", "DATE3"); // 正则匹配 ${xx} Pattern regex = Pattern.compile("\\$\\{(.*?)\\}"); // 占位符可能匹配的次数 int count = value.split("\\$\\{").length - 1; System.out.println("占位符可能匹配的次数:" + count); for (int i = 0; i < count; i++) { Matcher matcher = regex.matcher(value); boolean flag = matcher.find(); if (!flag) { // 没有匹配到,结束 break; } String key = matcher.group(0);// 取得匹配到的 ${xxx} if (map.containsKey(key)) { value = value.replace(key, map.get(key)); } System.out.println("第" + i + "次值:" + value); } }
****************************************************控制台打印结果*************************************************
占位符可能匹配的次数:3
第0次值:NAME1**sadas${job2}asda${date3}
第1次值:NAME1**sadasJOB2asda${date3}
第2次值:NAME1**sadasJOB2asdaDATE3