Java字串格式化,{}佔位符根據名字替換例項
阿新 • • 發佈:2020-10-26
我就廢話不多說了,大家還是直接看程式碼吧~
import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; public class StringFormatUtil { private static final Pattern pattern = Pattern.compile("\\{(.*?)\\}"); private static Matcher matcher; /** * 格式化字串 字串中使用{key}表示佔位符 * * @param sourStr * 需要匹配的字串 * @param param * 引數集 * @return */ public static String stringFormat(String sourStr,Map<String,Object> param) { String tagerStr = sourStr; if (param == null) return tagerStr; try { matcher = pattern.matcher(tagerStr); while (matcher.find()) { String key = matcher.group(); String keyclone = key.substring(1,key.length() - 1).trim(); Object value = param.get(keyclone); if (value != null) tagerStr = tagerStr.replace(key,value.toString()); } }catch (Exception e){ return null; } return tagerStr; } /** * 格式化字串 字串中使用{key}表示佔位符 利用反射 自動獲取物件屬性值 (必須有get方法) * * @param sourStr 需要匹配的字串 * * @return */ public static String stringFormat(String sourStr,Object obj) { String tagerStr = sourStr; matcher = pattern.matcher(tagerStr); if (obj == null) return tagerStr; PropertyDescriptor pd; Method getMethod; // 匹配{}中間的內容 包括括號 while (matcher.find()) { String key = matcher.group(); String keyclone = key.substring(1,key.length() - 1).trim(); try { pd = new PropertyDescriptor(keyclone,obj.getClass()); getMethod = pd.getReadMethod();// 獲得get方法 Object value = getMethod.invoke(obj); if (value != null) tagerStr = tagerStr.replace(key,value.toString()); } catch (Exception e) { // TODO Auto-generated catch block // Loggers.addException(e); } } return tagerStr; } /** * 格式化字串 (替換所有) 字串中使用{key}表示佔位符 * * @param sourStr * 需要匹配的字串 * @param param * 引數集 * @return */ public static String stringFormatAll(String sourStr,value.toString()); } }catch (Exception e){ return null; } return tagerStr; } /** * 格式花字串,按照佔位符名字 * 輸入:sourStr = xxxxx{a}xxxx{b},param = {a:A,b:B} * 輸出:targetStr = xxxxAxxxxB * @param sourStr * @param param * @return */ public static String stringFormat(String sourStr,JSONObject param) { String tagerStr = sourStr; if (param == null) return tagerStr; try { matcher = pattern.matcher(tagerStr); while (matcher.find()) { String key = matcher.group(); String keyclone = key.substring(1,value.toString()); } }catch (Exception e){ return null; } return tagerStr; } public static void main(String[] args) { // Map<String,Object> map = new HashMap<>(); // map.put("id","111"); // map.put("sss","ss"); // JSONObject json = new JSONObject(); // json.put("id","212"); // json.put("fff","xxxx"); // json.put("emmmmm",11); // stringFormat("sisas&{fff}_diwahwi%{id}{jio}",json); } }
補充知識:java中佔位符的使用
二話不說,先上程式碼
package com.string.format; public class StringFormat { //佔位符%s,拼接sql,刪除兩個表中的資料,條件是字串陣列型別的id public static void formSql(String tableName,String tableName2,String...strings){ //sql佔位符 %s佔位符 String sql="delete from %s,%s where id in (%s)"; //宣告新的字串 String sqls=""; //遍歷字串的引數陣列 for (String str : strings) { //將引數陣列拼接成字串,用逗號分割 sqls += str + ","; } //拼接最後會多出個逗號,擷取 sqls=sqls.substring(0,sqls.length()-1); //format第一個sql引數為目標字串,tableName,tableName2,為替換的兩表的名字,sqls為刪除資料的引數集合 String s=String.format(sql,tableName,tableName2,sqls); //輸出拼接後的sql System.out.println(s); } public static void main(String[] args) { //傳入引數為指定表名,和引數值 StringFormat.formSql("user","role","1","3","5","7","9","33"); } }
其實,傳入的引數是陣列型別的 值,我們也可以按array[0],array[1]的方式插入引數,只是引數個數應用不靈活,還是使用陣列的方式取值比較好,
public static void format(){ String st="%s的%s的價格是%f,是否售罄%c,佔總銷售的%d%%,庫存%d,是否為暢銷品%b"; String s=String.format(st,"58優品","啤酒",3.5,'是',50,199,true); System.out.println(s); } public static void main(String[] args) { //傳入引數為指定表名,和引數值 //StringFormat.formSql("user","33"); format(); }
public static void format(){ //String st="%s的%s的價格是%f,是否為暢銷品%b"; //String s=String.format(st,true); //System.out.println(s); SimpleDateFormat simple=new SimpleDateFormat("yyyy年MM月dd日 HH點mm分ss秒"); String newDate=simple.format(new Date()); String st1="%s的%s的價格是%s,是否售罄%s,佔總銷售的%s%%,庫存%s,是否為暢銷品%s,當前日期為%s"; String ss=String.format(st1,"3.5","80","998","true",newDate); System.out.println(ss); } public static void main(String[] args) { //傳入引數為指定表名,和引數值 //StringFormat.formSql("user",{}佔位符根據名字替換例項" src="http://img1.cppcns.com/images/2020/202010/wrpramp4wee.jpg" />/*%S字串型別的佔位符 * %c字元型別的佔位符 * %b布林型別的佔位符 * %d整數型別的佔位符 * %%百分比型別的佔位符 * %n換行型別的佔位符 * %t時間型別的佔位符 * c全部的日期時間型別 * F年-月-日格式 * D年/月/日格式 * rHH:MM:SS格式12小時制 * */以上這篇Java字串格式化,{}佔位符根據名字替換例項就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。