格式化字符串 - Formatter

举报
brucexiaogui 发表于 2021/11/26 00:14:47 2021/11/26
【摘要】 格式化字符串 - Formatter 1.前言 当我们需要对一段文本中某些关键词进行特定格式替换时,使用格式化Formatter类提供的方法可以实现文本内容的替换。 2.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;
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 有参数构造器

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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 字符型 f ormatter.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();
    }

  
 
  • 1
  • 2
  • 3
  • String.format方式使用
 String height = String.format("What is your height %s cm", 175);
 System.out.println("height = " + height);

  
 
  • 1
  • 2

文章来源: brucelong.blog.csdn.net,作者:Bruce小鬼,版权归原作者所有,如需转载,请联系作者。

原文链接:brucelong.blog.csdn.net/article/details/105703726

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。