最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2020年10月23日 15:11:38   作者:leaves_story  
這篇文章主要介紹了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, 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;
  }

  /**
   * 格式花字符串,按照占位符名字
   * 輸入:sourStr = xxxxx{a}xxxx ,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, 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;
  }

  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優(yōu)品","啤酒",3.5,'是',50,199,true);
    System.out.println(s);
  }
  public static void main(String[] args) {
    //傳入參數為指定表名,和參數值
    //StringFormat.formSql("user","role", "1","3","5","7","9","33");
    format();
  }

public static void format(){
    //String st="%s的%s的價格是%f,是否售罄%c,占總銷售的%d%%,庫存%d,是否為暢銷品%b";
    //String s=String.format(st, "58優(yōu)品","啤酒",3.5,'是',50,199,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, "58優(yōu)品","啤酒","3.5",'是',"80","998","true",newDate);
    
    System.out.println(ss);
  }
  public static void main(String[] args) {
    //傳入參數為指定表名,和參數值
    //StringFormat.formSql("user","role", "1","3","5","7","9","33");
    format();
  }

/*%S字符串類型的占位符
   * %c字符類型的占位符
   * %b布爾類型的占位符
   * %d整數類型的占位符
   * %%百分比類型的占位符
   * %n換行類型的占位符
   * %t時間類型的占位符
   * c全部的日期時間類型
   * F年-月-日格式
   * D年/月/日格式
   * rHH:MM:SS格式12小時制
   *
   */

以上這篇Java字符串格式化,{}占位符根據名字替換實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • AsyncHttpClient KeepAliveStrategy源碼流程解讀

    AsyncHttpClient KeepAliveStrategy源碼流程解讀

    這篇文章主要為大家介紹了AsyncHttpClient KeepAliveStrategy源碼流程解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • JAVA導出EXCEL表格的實例教學

    JAVA導出EXCEL表格的實例教學

    在本文中我們給大家整理了關于JAVA導出EXCEL表格的實例教學以及相關知識點,需要的朋友們學習下。
    2019-02-02
  • Java基于jeeplus vue實現簡單工作流過程圖解

    Java基于jeeplus vue實現簡單工作流過程圖解

    這篇文章主要介紹了Java基于jeeplus vue實現簡單工作流過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • SpringBoot多環(huán)境日志配置方式

    SpringBoot多環(huán)境日志配置方式

    SpringBoot?默認使用LogBack日志系統,默認情況下,SpringBoot項目的日志只會在控制臺輸入,本文給大家介紹SpringBoot多環(huán)境日志配置方式,需要的朋友可以參考下
    2024-08-08
  • Java唯一訂單編號生成代碼例子

    Java唯一訂單編號生成代碼例子

    在項目中,我們經常遇到需要生成訂單編號、字典編號等唯一值場景,下面這篇文章主要給大家介紹了關于Java唯一訂單編號生成的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-07-07
  • Easycode自動化springboot的curd

    Easycode自動化springboot的curd

    這篇文章主要介紹了Easycode自動化springboot的curd,圍繞主題的相關資料展開詳細內容,具有一定的參考價值,需要的小伙伴可以參考一下,希望給對你有所幫助
    2022-01-01
  • java如何從地址串中解析提取省市區(qū)(完美匹配中國所有地址)

    java如何從地址串中解析提取省市區(qū)(完美匹配中國所有地址)

    這篇文章主要給大家介紹了關于java如何從地址串中解析提取省市區(qū)的相關資料,通過這個方法可以完美匹配中國所有地址,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • 一篇文章帶你了解JVM內存模型

    一篇文章帶你了解JVM內存模型

    本文講解了Java 內存模型來看看解決可見性、有序性問題的 Java 內存模型(JMM),今天通過本文給大家介紹Java 內存模型(JVM)的相關知識,感興趣的朋友一起看看吧
    2021-09-09
  • 如何在spring官網查找XML基礎配置文件

    如何在spring官網查找XML基礎配置文件

    這篇文章主要介紹了如何在spring官網查找XML基礎配置文件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • 淺談Java中的高精度整數和高精度小數

    淺談Java中的高精度整數和高精度小數

    本篇文章主要介紹了淺談Java中的高精度整數和高精度小數,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08

最新評論

通辽市| 青河县| 家居| 靖远县| 闵行区| 临沭县| 南乐县| 宾阳县| 鄱阳县| 光山县| 济宁市| 无锡市| 巴楚县| 三门峡市| 望都县| 正镶白旗| 蓬安县| 鄂伦春自治旗| 光山县| 威宁| 垦利县| 南澳县| 黔西县| 丹寨县| 榆中县| 卫辉市| 松原市| 安新县| 延长县| 鄢陵县| 镶黄旗| 裕民县| 鹤壁市| 曲阜市| 昌江| 洛南县| 紫云| 深圳市| 运城市| 民县| 鄂伦春自治旗|