java格式化----java.util.Formatter

本文介绍了Java中的Formatter类,它是用于格式化输出的强大工具,类似于C语言的printf。Formatter支持argument_index$、flags、width、precision和conversion等格式设置。通过Formatter的构造器和format方法,可以实现灵活的字符串、数值等类型的数据格式化。文章还提供了实例来解释各部分的用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java.util.Formatter

在java中我们格式化一个字符串的方法有很多,最基本的就是不断地用+号来加出一个String,但是这样的操作有很多的问题,而且有的时候也非常的不方便,这个时候我们就要用到其他的工具。类似C的printf的格式方法,在java中也是有的,写成System.out.printf();还有另外一种方法就是使用Formatter类,这个类可以说是功能强大,能格式化任何信息。时间类可以参见我的另外一篇博文用SimpleDateFormat来格式化。

(一) 模型结构

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

Eg:(“%4$2s %3$2s %2$2s %1$2s”, “a”, “b”, “c”, “d”) // -> ” d c b a”

相信只要是讲Formatter的就会一上来吧这句格式抛出来,再将一些玄学的东西,让新手彻底的看蒙,我发现说的越少效果才能越好,那我就什么都不说了,下面用五个点来吧上面的这句格式逐条分析。

(二) argument_index$ 参数序号

这个单词表示的是参数的序号,在这个表示参数的位数的数字表示之前需要加上一个$符号。比如,$2表示在参数列表中的第二个参数用来替换这个位置的内容。这个序号不是必须写的值,如果不写参数序号那么就默认为按照顺序的参数列表。

(三) flags 标志

可选的属性,如果不选的话默认没有,主要有以下这些可选内容:

标记含义示例
-结果将是左对齐的。%-4d 宽度最小为四位并且左对齐
#如果是浮点数则结果加小数点,十六进制和八进制分别加0x和0%#x 最后输出结果变为16进制并且加0x
+正数数字会额外显示一个+号%+d 结果如果是证书则显示+号
一个空格对于正值,结果中将包括一个前导空格% d 如果结果是正数则在前面加个空格
0结果将用零来填充%010d 所有宽度不满10位的数字填充前导0
,结果将包括特定于语言环境的组分隔符%,d 每三位数字来个逗号,看起来清晰
(结果将是用圆括号括起来的负数%(d 如果结果是负数,不写符号而是用()括起来

(四) width 宽度

宽度是可选属性,如果不写的话就默认宽度,如果写的话最好和flags一起配合使用,但是一定要注意宽度如果写了不能为0,否则会报错。

Eg: %-4d 宽度最小为四位并且左对齐

(五) .precision 小数位数

可选属性,这个和c语言中的做法很像,如果有浮点数的操作,则使用这个属性可以保证精度。

Eg:%.5f 保留这个浮点数小数点后五位数字

(六) conversion 格式类型

这是一个必选的参数,就是刚才我们在所有例子中都用到的参数,用这个来确定被格式内容的类型,如果类型不同会报错,先看一下所有类型的表:

转换参数类别说明
‘b’ ‘B’常规如果参数 arg 为 null,则结果为 “false”。如果 arg 是一个 boolean 值或 Boolean,则结果为 String.valueOf() 返回的字符串。否则结果为 “true”。
‘h’ ‘H’常规如果参数 arg 为 null,则结果为 “null”。否则,结果为调用 Integer.toHexString(arg.hashCode()) 得到的结果。
‘s’ ‘S’常规如果参数 arg 为 null,则结果为 “null”。如果 arg 实现 Formattable,则调用 arg.formatTo。否则,结果为调用 arg.toString() 得到的结果。
‘c’ ‘C’字符结果是一个 Unicode 字符
‘d’整数结果被格式化为十进制整数
‘o’整数结果被格式化为八进制整数
‘x’ ‘X’整数结果被格式化为十六进制整数
‘e’ ‘E’浮点结果被格式化为用计算机科学记数法表示的十进制数
‘f’浮点结果被格式化为十进制数
‘g’ ‘G’浮点根据精度和舍入运算后的值,使用计算机科学记数形式或十进制格式对结果进行格式化。
‘a’ ‘A’浮点结果被格式化为带有效位数和指数的十六进制浮点数
‘t’ ‘T’日期时间日期和时间转换字符的前缀。请参阅日期/时间转换。
‘%’百分比结果为字面值 ‘%’ (‘\u0025’)
‘n’行分隔符结果为特定于平台的行分隔符

(七)Formatter构造器

Formatter类的构造函数有很多,但是无非是几个参数的不同组合,总结起来参数有以下这些:

1. Formatter()  无参数,构造一个新 formatter。
2. Formatter(Appendable a, Locale l)  构造一个带指定目标文件(new StringBuilder)和语言环境的新 formatter。
3. Formatter(File file, String csn, Locale l)   构造一个带指定文件、字符集和语言环境的新 formatter。
4. Formatter(String fileName, String csn, Locale l)  构造一个带指定文件名、字符集和语言环境的新 formatter。
5. Formatter(OutputStream os, String csn, Locale l)   构造一个带指定输出流、字符集和语言环境的新 formatter。

上述这些构造器中,我们较为常用的是第一个和第二个或者根据特殊的用途,后几个也会被用到。

(八)format方法

在Formatter类中最常用也是只能用的方法,,就是format,这个函数有两种参数格式:
第一种是:format(Locale l, String format, Object… args)
使用指定的语言环境、格式字符串和参数,将一个格式化字符串写入此对象的目标文件中。
第二种是:format(String format, Object… args)
使用指定格式字符串和参数将一个格式化字符串写入此对象的目标文件中。
语言环境如果有需要的时候会用到,那么我们在这里就只讨论第二种。

直接来个例子:

 StringBuilder sb = new StringBuilder();
// Send all output to the Appendable object sb
Formatter formatter = new Formatter();

formatter.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d");
formatter.format(Locale.FRANCE, "e = %+10.4f", Math.E);

不知道为什么,我的MyEclipse中这两句话总是报错,估计是我的ide的问题,这两句格式化应该是没问题的,如果你的ide也会报错可以把这两句的格式改成这样:

Object[] obj = {"a", "b", "c", "d"};
formatter.format("%4$2s %3$2s %2$2s %1$2s", obj);

把第二个参数最直接的改成Object对象,绝对没问题,那么这两个的输出结果是:

d c b a
e = +27183

(九)总结

Formatter是广泛被用到的格式化方法,它能让一些东西变得更加有规范,很多超市小票,信息单,用这个方法来格式化就显得很不错,平时也应该多加练习这个方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值