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();
}
}
java正則表達式替換佔位符
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.