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字符串格式化,{}占位符根据名字替换实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 获取 网卡名称_Java获取网
- 下一篇: perl java_与Perl相比Jav