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字符串格式化,{}占位符根据名字替换实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • JAVA数字千分位和小数点的现实代码(处理金额问题)

    金融类等项目通常对于金额较大的字段,通常要求千分位显示,数字保留两位小数,分装工具类方便以后工作需要: 说明: 1.井号(#)表示一位数字,逗号是用于分组分隔符的占位符,点是小数点的占位符. 2.如果小数点的右面,值有三位,但是式样只有两位.format方法通过四舍五入处理. 3.0 - 如果对应位置上没有数字,则用零代替 4.# - 如果对应位置上没有数字,则保持原样(不用补):如果最前.后为0,则保持为空. 5.正负数模板用分号(;)分割 方法一: package com.mo.util;

  • Java保留两位小数的几种写法总结

    本文列举了几个方法: 1. 使用java.math.BigDecimal 2. 使用java.text.DecimalFormat 3. 使用java.text.NumberFormat 4. 使用java.util.Formatter 5. 使用String.format 文章末尾给大家分享了更多的拓展知识,另外可以自己实现或者借用封装好的类库来实现,在这篇文章中就不一一列举了. 下面来看看详细的介绍. 一.使用BigDecimal,保留小数点后两位 public static String

  • java字符串中${}或者{}等的占位符替换工具类

    正如标题所述,这是一个替换java字符串中${}或者{}等占位符的工具类,其处理性能比较令人满意.该类主要通过简单的改写myatis框架中的GenericTokenParser类得到.在日常开发过程中,可以将该类进行简单的改进或封装,就可以用在需要打印日志的场景中,现在张贴出来给有需要的人,使用方式参考main方法,不再赘述! public class Parser { /** * 将字符串text中由openToken和closeToken组成的占位符依次替换为args数组中的值 * @par

  • 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

  • JAVA字符串格式化-String.format()的使用

    本篇介绍JAVA字符串格式化-String.format()的使用,具体如下: 常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处.format()方法有两种重载形式. format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串. format(Locale locale, String for

  • java字符串格式化(String类format方法)

    常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象. format()方法有两种重载形式. 显示不同转换符实现不同数据类型到字符串的转换,如图所示: 测试用例: public static void main(String[] args) { String str=null; str=String.format("Hi,%s", "王力"); System.out.println(str); str=String.fo

  • web开发js字符串拼接占位符及conlose对象Api详解

    目录 占位符替换 控制台打印 table() log.info.warn.error group(),groupCollapsed(),groupend() 占位符替换 控制台打印(conlose.log())或者拼接字符换, 可以借助占位符解决 %s    字符串 %d  / %i    整数 %f    小数(整数.小数都可以, 推荐) %o    对象 %c    后面字符串的样式 示例代码: // %s示例 let s1 = '爱' let s2 = '祖国' console.log('

  • Java字符串常见的操作(比较,查找,替换等)

    目录 一,字符串的比较 1,equal()方法 2,compareTo()方法 二,字符串查找 1,contains()方法 2, indexOf()方法 3,startsWith()和endsWith()方法 三,字符串替换 replaceAll()方法 四,字符串拆分 split()方法 五,字符串截取 substring()方法 六,字符串其他常见的操作方法 1,trim()方法 2,toUpperCase()和toLowerCase()方法 3,length()方法 3,reverse(

  • java字符串格式化输出实例讲解

    代码如果不进行格式化的处理,那么在查阅上会浪费不少的时间.今天我们要说的是字符串的格式化处理,作为基础编程内容,相信大家都字符串都不陌生.我们可以把字符串进行连接,通过这种方法实现格式化的操作.下面我们就格式化的说明.字符串符号图解.实例带来介绍. 1.说明 java 在 JDK1.5 后对 PrintStream 功能进行了扩充,增加了格式化输出功能.直接使用 Print 即可.但是输出的时候需要指定输出的数据类型. 如果不使用格式化输出,就需要进行字符串连接,如果变量比较多,拼接就会显得繁琐

  • java泛型中占位符T和?有什么区别

    泛型中占位符T和?有什么区别?这是一个好问题,有的人可能弄不清楚,所以我们这里简单的演示一下,相信大家一定能弄清楚的! 先上两段代码: public static <T> void show1(List<T> list){ for (Object object : list) { System.out.println(object.toString()); } } public static void show2(List<?> list) { for (Object

  • python字符串格式化(%格式符和format方式)

    目录 %格式符 format方式 总结 Python的字符串格式化有两种方式:%格式符方式,format方式 %格式符 %[(name)][flags][width].[precision]typecode (name)      可选,用于选择指定的key flags          可选,可供选择的值有: +       右对齐:正数前加正好,负数前加负号: -        左对齐:正数前无符号,负数前加负号: 空格    右对齐:正数前加空格,负数前加负号: 0        右对齐:

  • Java实现占位符名称替换值

    目录 前言 代码 原理 前言 占位符现在应该说是比较流行的动态赋值,方法有String.format(),通过%s或其他来赋值:或者MessageFormat.format(),通过{0}来赋值,参数名都不可定义 项目中有个需求,根据一串带着参数名占位符的url,替换掉对应参数名的值,由此有了以下的工具类. 代码 import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; public

  • JAVA字符串占位符使用方法实例

    目录 使用 replace 函数动态填充字符串 使用 String.format() 占位符替换 String.format 使用 1.占位符 2.对字符或字符串操作 3.对整数操作 4.对浮点数操作 5.对日期时间操作 补充:Java替换字符串中的占位符 总结 使用 replace 函数动态填充字符串 String str="Hello {0},我是 {1},今年{2}岁"; str = str.replace("{0}", "CSDN");

随机推荐