Java 字符串格式化,{}占位符根据名字替换 实例

网友投稿 1254 2023-03-21

Java 字符串格式化,{}占位符根据名字替换实例

我就废话不多说了,大家还是直接看代码吧~

imporLxXIbEAEPmt 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 formatLxXIbEAEPm(){

//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小时制

*

*/

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇: java 图片与base64相互转化的示例
下一篇: 详解springboot的多种配置方式
相关文章

 发表评论

取消回复

暂时没有评论,来抢沙发吧~

聚圣源店铺起名少女属猴起名宜什么鹿鼎记未删减版姓桑女孩起什么名字好英文名软件v7.0史起名大全女温如玉二虎小说全文免费阅读起英文名称男生搞笑起名g7密谈中国房间断网唐山起名饼干店起名之了课堂城市起名小孩子在线起名公司起名寓意纹身店起名大全警世通言重生过去当神厨起名字八字缺水爱上哥们电视剧青丝影院翡翠店铺起名大全孩子起名的大师三个字的生鲜超市起名算命起名李氏男孩起名字啊郑氏女起名字网上起名难不好摘抄好段淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化