java基础之格式化输出

在jdk SE5.0以后沿用了C语言库函数中的printf方法,例如调用

System.out.printf("%8.2f",x);

可以用8个字符的宽度和小数点后两个字符的精度去打印x。也就是说,打印输出一个空格和7个字符,如下所示:

3333.33

用printf也可以使用多个参数,例如:

System.out.printf("Hello,%s.Next year,you'll be %d",name,age);

每一个以%字符开始的格式说明符都用相应的参数替换。格式说明符尾部的转换符将指示被格式化的数值类型:f表示浮点数,s表示字符,d表示十进制整数。下表列出了所有转义符。

转义符类型举例
d十进制数159
x十六进制数9f
o八进制数237
f定点浮点数15.9
e指数浮点数1.59e+01
g通用浮点数
a十六进制浮点数0x1.fccdp3
s字符串Hello
c字符H
b布尔true
h散列码42628b2
tx日期时间....
%百分号%
n与平台相关行分隔符....

另外还有控制格式化输出的各种标志。例如,逗号标志增加了分组的分隔符。

System.out.printf("%,.2f",1000.0/3.0);

打印

3,333.33

可以使用多个标志,例如,"%,(.2f"使用分组的分隔符并将负数括在括号内。

下表列出所有标志:

标志目的举例
+打印正数和负数的符号+3333.33
空格在正数之前添加空格| 3333.33|
0数字前面补0003333.33
-左对齐|3333.33 |
将负数括在括号内(3333.33)
添加分组分隔符3,333.33
#(对于f格式)包含小数点
#(对于x或0格式)添加前缀0x或00xcafe
$给定被格式化的参数索引。例如,%1$d,%1$x将以十进制和十六进制格式打印第一个参数159  9F
<格式化前面说明的数值。例如,%d%<x将以十进制和十六进制打印同一个数值159 9F

 可以使用s转换符格式化任意对象。对于任意实现了Formattable接口的对象都将调用formatTo方法;否则将调用toString方法,它可以将对象转为字符串。

可以使用静态的String.format方法创建一个格式化字符串,而不打印输出:

String message=String.format("Hello, %s. Next year, you'll be %d",name,age);

下表是日期和时间的转换符

转换符类型举例
c完整的时间和日期Mon Feb 09 18:05:19 PST 2004
FISO 8601 日期2004-02-09
D美国格式的日期02/09/2004
T24小时时间18:05:19
r12小时时间06:05:19 pm
R24小时时间没有秒18:05
Y4位数字的年(前面补0)2004
y年的后两位数字(前面补0)04
C年的前两位数字(前面补0)20
B月的完整拼写February
b或h月的缩写Feb
m两位数字的月(前面补0)02
d两位数字的日(前面补0)09
e两位数字的月(前面不补0)2
A星期几的完整拼写Monday
a星期几的缩写Mon
j三位数的年中的日子(前面补0),在001到366之间069
H两位数字的小时(前面补0),在0到23之间18
k两位数字的小时(前面不补0),在0到23之间18
I两位数字的小时(前面补0),在0到12之间06
i两位数字的小时(前面不补0),在0到12之间6
M两位数字的分钟(前面补0)05
S两位数字的秒(前面补0)19
L三位数字的毫秒(前面补0)047
N9位数字的毫微秒(前面补0)047000000
P上午或下午的大写标志PM
p上午或下午的小写标志pm
z从GMT起,RFC822数字位移-0800
Z时区PST
s从格林威治时间1970-01-01 00:00:00起的秒数1078884319
Q从格林威治时间1970-01-01 00:00:00起的毫秒数1078884319047

从上表中可以得知,某些格式只给出了指定日期的部分信息。例如,只有日期或月份。如果需要多次对日期操作才能实现对每一部分进行格式化的目的就太笨拙了。为此,可以采用一个格式化的字符串指出要被格式化的参数索引。索引必须紧跟%后面,并以$结束。例如,

System.out.printf("%1$s %2$tB %2$te, %2$tY", "Due date:",new Date());

打印:

Due date:February 9, 2004

还可以选择使用<标志。它指示前面格式说明中的参数将被再次使用。也就是说,下列语句将产生与前面语句相同的效果。

System.out.printf("%s %tb %<te,%<tY", "Due date:",new Date());

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值