格式化字符串 - Formatter

格式化字符串 - Formatter

1.前言

当我们需要对一段文本中某些关键词进行特定格式替换时,使用格式化Formatter类提供的方法可以实现文本内容的替换。

2.Formatter类的一个小Demo

2.1. demo示例

使用Formatter替换SQL语句的可变参数,输出一个可变的sql语句。

public class SqlHandler {
   private final String INSERT_SQL_TEMP  = "INSERT INTO `%s`.`%s` (%s) VALUES(%s)";
   
   public String getInsertSql(SqlContext sqlContext) {
        //1.创建sql语句:INSERT INTO `%s`.`%s` (%s) VALUES(%s)
        String sql = new Formatter()
                .format(INSERT_SQL_TEMP,
                        sqlContext.getDatabase()
                        ,sqlContext.getTable()
                        ,sqlContext.columnName()
                        ,sqlContext.params()
                ).toString();
        //2.返回sql语句
        return sql;
    }
}
2.2.Formatter Demo介绍
1.new Formatter():创建Formatter()对象。
2.format(String str,Object ...args) : 方法接收两个参数,第一个参数是需要格式化的字符串,第二个格式化参数依次将第一个参数的字符串占位符进行替换。
3.上面Demo实现的功能就是用接收的参数依次替换SQL中%s占位符的内容,实现创建可变的sql语句功能。
- sql语句中
	- 第一个%s:database
	- 第二个%s:table
	- 第三个%s:table字段名称
	- 第四个%s:参数值

//1.创建sql语句:INSERT INTO `%s`.`%s` (%s) VALUES(%s)
        String sql = new Formatter()
                .format(INSERT_SQL_TEMP,
                        sqlContext.getDatabase()
                        ,sqlContext.getTable()
                        ,sqlContext.columnName()
                        ,sqlContext.params()
                ).toString();

3. Formatter类介绍

3.1.Formatter构造器
  • 无参构造器

创建一个无参的Formatter构造器,默认将字符串存放在StringBuilder 中,通过toString() 方法输出字符串内容。

// 无参数构造Formatter对象
Formatter formatter = new Formatter();
// 格式化操作
formatter.format("I lover you is %s.", face);
// toString()获取格式化字符串
String str = formatter.toString();
// 输出格式化字符串.
System.out.println(str);
  • 有参数构造器

public Formatter(Appendable a) 构造器参数表示格式化输出的目的地

3.2. format方法

public Formatter format(String format, Object… args)

  • format - 待格式化字符串,通过格式化符号进行占位取代相应位置的内容。
  • args - 多个参数对象,其内容将依次对应format中的占位符(格式化说明符),根据指定的内容格式填充到指定位置,从而形成一个满足要求的字符串。
String sql = "INSERT INTO `%s`.`%s` (%s) VALUES(%s)";

new Formatter()
    .format(sql ,
		         sqlContext.getDatabase()
                ,sqlContext.getTable()
                ,sqlContext.columnName()
                ,sqlContext.params()
     ).toString();
3.3.格式化说明符
3.3.1.格式

%[argument_index$][flags][width][.precision]conversion

3.3.2.格式说明
  • argument_index$:指定对应的内容参数位置,默认按照顺序依次对应。
  • flags:格式控制。
  • width:区域宽度。
  • .precision:对于浮点型数据,表示显示的小数位数;对于字符串数据,表示显示的字符数量。
  • conversion:类型转换字符。
3.3.3.格式控制(flags)
符号作用示例效果
无负号右对齐formatter.format("***%8d***", 1000);*** 1000***
有负号“-”左对齐formatter.format("***%-8d***", 1000);***1000 ***
有加号“+”正数前显示正号
负数前显示负号
formatter.format("***%+8d***", 1000);
formatter.format("***%+8d***", -1000);
*** +1000***
*** -1000***
有空格“ ”正数前显示空格
负号前显示负号
formatter.format("***% 8d***", 1000);
formatter.format("***% 8d***", -1000);
*** 1000***
*** -1000***
有零“0”使用0填充剩余位置formatter.format("***%08d***", 1000);00001000
有逗号“,”每3位数字添加一个逗号formatter.format("***%,8d***", 1000);*** 1,000***
3.3.4.类型转换字符
符号类型示例效果
d整数型(十进制)formatter.format("%d", 1000);1000
o整数型(八进制)formatter.format("%o", 1000);1750
x整数型(十六进制)formatter.format("%x", 1000);3e8
f浮点型(十进制)formatter.format("%f", 1000.0);1000.000000
e浮点型(科学计数)formatter.format("%e", 1000.0);1.000000e+03
b布尔型formatter.format("%b", true);true
c字符型 formatter.format("%c", ‘A’);A
s字符串型formatter.format("%s", “String”);String
%字符“%”formatter.format("%d%%", 100);100%

3.4. String.format方法

String类中也有个format方法,该方法就是调用了Formatter类的format方法,使用String类提供的format方法省去了实例化Formatter类对象,操作更加简洁。

  • String.format代码实现
public static String format(String format, Object... args) {
        return new Formatter().format(format, args).toString();
    }
  • String.format方式使用
 String height = String.format("What is your height %s cm", 175);
 System.out.println("height = " + height);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值