java正則表達式替換佔位符

import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { var p = Pattern.compile("(\\\\\\{(\\w+?)})"); var s = "First==\\{asd}---\\{qwe}---\\{asd}---\\{123_a}==End"; var map = new HashMap<String,Object>(); map.put("asd",12345); map.put("qwe",new Date()); map.put("123_a","阿斯頓"); System.out.println(regReplacePlaceholder(s,map)); //輸出:First==12345---2023-09-19T22:46:38.71---12345---阿斯頓==End } /**替換帶佔位符字符串 * @param strWithPlaceholder 帶有\{placeholderName}樣式佔位符的字符串 * @param placeholderMap placeholderName所在的集合 * @return 替換後的字符串 */ public static String regReplacePlaceholder(String strWithPlaceholder, Map<String,?> placeholderMap){ var p = Pattern.compile("(\\\\\\{(\\w+?)})");// (\{(\w+?)}) var m = p.matcher(strWithPlaceholder); var sb = new StringBuilder(); while(m.find()){ var k = m.group(1); var ki=m.group(2); if (k!=null&&k.length()>=4&&ki.length()>=1){ var v= placeholderMap.get(ki); if (v!=null){ String vv; if(v instanceof Date d){ vv=((Date)v).toInstant().atOffset(ZoneOffset.ofHours(8)).toLocalDateTime() .format(DateTimeFormatter.ISO_LOCAL_DATE_TIME); }else if(v instanceof LocalDate d){ vv=d.format(DateTimeFormatter.ISO_LOCAL_DATE); }else if(v instanceof LocalDateTime d){ vv=d.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME); }else vv = String.valueOf(v); m.appendReplacement(sb,vv); } } } m.appendTail(sb); return sb.toString(); } }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章