1. 程式人生 > 程式設計 >Java字串格式化,{}佔位符根據名字替換例項

Java字串格式化,{}佔位符根據名字替換例項

我就廢話不多說了,大家還是直接看程式碼吧~

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]的方式插入引數,只是引數個數應用不靈活,還是使用陣列的方式取值比較好,

Java字串格式化,{}佔位符根據名字替換例項

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();
  }

Java字串格式化,{}佔位符根據名字替換例項

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字串格式化,{}佔位符根據名字替換例項就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。