Java字符串格式化,{}占位符根据名字替换实例
程序员文章站
2022-03-27 20:22:52
我就废话不多说了,大家还是直接看代码吧~import java.beans.propertydescriptor;import java.lang.reflect.method;import 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{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<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优品","啤酒",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字符串格式化,{}占位符根据名字替换实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
上一篇: [web] javascript学习笔记
下一篇: 手机百度网盘生活记功能怎么玩