日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 按位置格式化字符串_Java字符串格式化,{}占位符根据名字替换实例

發布時間:2023/12/2 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 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 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{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, 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 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","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優品","啤酒",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優品","啤酒","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字符串格式化,{}占位符根據名字替換實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持站圈網。

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的java 按位置格式化字符串_Java字符串格式化,{}占位符根据名字替换实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。