java格式化字符串Formatter

前言

在java中我们格式化一个字符串的方法有很多,最基本的就是不断地用+号来加出一个String

但是这样的操作有很多的问题,而且有的时候也非常的不方便,这个时候我们就要用到其他的工具。类似C的printf的格式方法,在java中也是有的,写成System.out.printf();还有另外一种方法就是使用Formatter类,这个类可以说是功能强大,能格式化任何信息。

在学习Formatter之前,我们先学习下格式化符号

一、格式化符号

1、标识

1、-

将是左对齐的。(默认是右对齐),不可以与“用0填充”同时使用

案例

System.out.println(String.format("%-8d", 3123));3123
System.out.println(String.format("%8d", 3123));//空格 空格 空格 空格 3123
String.format("%-08d", 3123)//报错

2、#

如果是浮点数则结果加小数点,十六进制和八进制分别加0x和0只适用于8进制和16进制,8进制时在结果前面增加一个0,16进制时在结果前面增加0x

案例

System.out.println(String.format("%-#8x", 3123));//0xc33
System.out.println(String.format("%-#8o", 3123));//06063  
System.out.println(String.format("%-#8d", 3123));//报错

3、+

正数前显示正号,负数前显示负号(一般情况下只适用于10进制,若对象为BigInteger才可以用于8进制和16进制)

案例

String.format("%+08d", 3123)+0003123
String.format("%+08d", -3123)-0003123

4、一个空格

正数前显示空格,负号前显示负号(一般情况下只适用于10进制,若对象为BigInteger才可以用于8进制和16进制)

案例

String.format("% 08d", -3123)-0003123
String.format("% 08d", 3123) 0003123

5、0

结果将用零来填充

案例

System.out.println(String.format("%08d", 3123));//0003123

6、,

结果将包括特定于语言环境的组分隔符

案例

String.format("%,07d", 23123)023,123
String.format("%,08d", 23123)0023,123
String.format("%,09d", 23123)00023,123
String.format("%0,9d", 23123)00023,123
String.format("%,-9d", 231111123)231,111,123
String.format("%09,d", 23123)Exception

7、(

结果将是用圆括号括起来的负数(一般情况下只适用于10进制,若对象为BigInteger才可以用于8进制和16进制)

案例

String.format("%(-9d", 20)20  
String.format("%(-9d", -20)(20)  
String.format("%,(-9d", -25550)(25,550) 
String.format("%,(-9x", -25550)Exception

8、<
案例

System.out.println(String.format("%d%<x", 10));10a
2、整数模型结构
  • 格式化公式:%[index$][标识][最小宽度]转换方式

index$:指定是第几个参数

最小宽度:转换后的整数的最小位数

标识:标识可以有多个

转换方式:

'd'(必须小写·)              整数型(十进制必须是整数             String.format("%-8d",12//12
'o'(不是零)(必须小写)       整数型(八进制)必须是整数           String.format("%-8o",12)//14   
'x' 'X'                  整数型(十六进制)必须是整数          String.format("%-8x",12)//c       

案例

%1$-2d

百分比符号“%”是特殊格式的一个前缀。那么我们要输入一个百分比符号该怎么办呢?肯定是需要转义字符的,但是要注意的是,在这里转义字符不是“\”,而是“%”。换句话说,下面这条语句可以输出一个“12%”:

System.out.println(String.format("%1$d%%", 12));//12%
3、浮点数模型结构

浮点数的格式化公式比整数的多了一个精度,用于控制小数点后的位数。

格式化公式:%[index$][标识][最少宽度][.精度]转换方式

转换方式:

'f'          浮点型(十进制)必须是小数     //String.format("%-8.2f",12.00)12.00  
'e' 'E'      浮点型(科学计数)必须是小数    //String.format("%-8.2E",12.0)1.20E+01
'g', 'G'     根据具体情况,自动选择用普通表示方式还是科学计数法方式//String.format("%-8.2g",1000.0)1.0e+03 
'a', 'A'     结果被格式化为带有效位数和指数的十六进制浮点数 //String.format("%-8.2a",1.0)0x1.00p0
4、字符串模型结构

字符串格式化不能有标识,否则运行错误

格式化公式:%[index$][最少宽度][.精度]s/S

最少宽度:表明要向输出中写入的最少字符数,如果最少宽度大于字符个数,就用空格来凑,(?>=最少宽度)

精度:来限制字符数,如果其限制字符数大于原字符的个数,则输出原字符的个数(?<=精度)

System.out.println(String.format("%7.8s","aeee"));//<空格><空格><空格>aeee

System.out.println(String.format("%1.3s","aeee"));//aee

argument_index$ 参数序号

这个单词表示的是参数的序号,在这个表示参数的位数的数字表示之前需要加上一个$符号。

index : 指 定 是 第 几 个 参 数 ; 比 如 , 2 :指定是第几个参数;比如,2 2表示在参数列表中的第二个参数用来替换这个位置的内容。这个序号不是必须写的值,如果不写参数序号那么就默认为按照顺序的参数列表。

%s/%S,按顺序输出,加index后可以调整输出顺序

System.out.println(String.format("%4$s,%3$s,%2$s,%1$s","a","b","c","d"));//d,c,b,a
System.out.println(String.format("%4$s%3$s%2$s%1$s","a","b","c","d"));//dcba
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值