欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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]的方式插入参数,只是参数个数应用不灵活,还是使用数组的方式取值比较好,

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

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();
  }

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

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();
  }

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

/*%s字符串类型的占位符
   * %c字符类型的占位符
   * %b布尔类型的占位符
   * %d整数类型的占位符
   * %%百分比类型的占位符
   * %n换行类型的占位符
   * %t时间类型的占位符
   * c全部的日期时间类型
   * f年-月-日格式
   * d年/月/日格式
   * rhh:mm:ss格式12小时制
   *
   */

以上这篇java字符串格式化,{}占位符根据名字替换实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。