前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >详述 Java 语言中的格式化输出

详述 Java 语言中的格式化输出

作者头像
全栈程序员站长
发布2022-09-08 11:56:03
9670
发布2022-09-08 11:56:03
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

1 前言

相信大家在学习 Java 语言的时候,见到的第一条输出语句,就是:

代码语言:javascript
复制
System.out.println("Hello World");

毫无疑问,该语句的作用就是将Hello World打印到控制台,格式也非常的简单,直接按原格式输出。

但是,如果将输出的内容换成“数值”或者“日期”呢?其打印的格式是否会有什么不同的变化呢?接下来,就让咱们一起看一看在 Java 语言中,数值和日期是如何进行格式化输出的。

2 数值

首先,给出代码示例:

代码语言:javascript
复制
/** * @author 维C果糖 * @create 2017-03-28-上午9:45 */

public class SysDemo { 
   
    public static void main(String[] args) {
        double d = -12345.678;
        System.out.printf("%6.2f" , d);
        System.out.println();
        System.out.printf("%,(.2f" , d);
        System.out.println();
        System.out.printf("%,6.1f" , d);
        System.out.println();
        System.out.printf("%s" , d);        // 转换成字符串
        System.out.println();
        System.out.printf("%h" , d);        // 转换成散列码
    }
}

运行上述代码,结果如下图所示:

如上图所示,以输出第一个结果的代码为例,%6.2f表示除符号位外,共6+2=8个字符的宽度,以及小数点后两个字符的精度打印数值。其中,每一个以%字符开始的格式说明符都用相应的参数进行替换,格式说明符尾部的转换符表示被格式化的数值类型,例如f就表示浮点数。下面,列出常用的转换符:

转换符

类型

举例

d

十进制整数

250

f

定点浮点数

12.3

s

字符串

hello

c

字符

a

b

布尔型

true

h

散列码

87c258e

此外,如第二个输出结果所示,还有用于printf函数的标记。下面列出常见的标记:

标记

目的

举例

+

打印正数和负数的符合

+12345.6

(

将负数括在括号内

(12345.68)

添加分组分隔符

12,345.7

0

数字前面用 0 补位

00123.45

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

3 日期

首先,给出代码示例:

代码语言:javascript
复制
import java.util.Date;

/** * @author 维C果糖 * @create 2017-03-28-上午10:20 */

public class SysDemo { 
   
    public static void main(String[] args) {
        System.out.printf("%tc", new Date());
        System.out.println();
        System.out.printf("%tF", new Date());
        System.out.println();
        System.out.printf("%tT", new Date());
        System.out.println();
        System.out.printf("%tQ", new Date());
    }
}

运行上述代码,结果如下图所示:

如上图所示,以输出第一个结果的代码为例,%tc表示输出完整的日期和时间。在这里,使用以t开始,以下表中任意字母结束的两个字母格式,此外,下面基本全部列出了关于日期与时间的转换符:

转换符

类型

举例

c

完整的日期和时间

星期二 三月 28 11:00:52 CST 2017

F

ISO 8601 日期

2017-03-28

D

美国格式的日期(月/日/年)

03/28/2017

T

24 小时时间

11:00:52

r

12 小时时间

11:00:52 am

R

24 小时时间没有秒

11:00

Y

4 位数字的年(前面补 0)

2017

y

年的后两位数字(前面补 0)

17

C

年的前两位数字(前面补 0)

20

B

月的完整拼写

March

b 或者 h

月的缩写

Mar

m

两位数字的月(前面补 0)

03

d

两位数字的日(前面补 0)

28

e

两位数字的月(前面不补 0)

3

A

星期几的完整拼写

Monday

a

星期几的缩写

Mon

j

三位数中的年的日(前面补 0),在 0001 到 366 之间

087

H

两位数字的小时(前面补 0),在 0 到 23 之间

11

k

两位数字的小时(前面不补 0),在 0 到 23 之间

11

M

两位数字的分钟(前面补 0)

26

S

两位数字的秒(前面补 0)

17

L

三位数字的毫秒

413

N

九位数字的毫微秒

413000000

P

上午或下午的大写标志

AM

p

上午或下午的小写标志

am

z

从 GMT 起,RFC822 数位位移

+0800

Z

时区

CST

s

从格林威治时间 1970-01-01 00:00:00 起的秒数

1490671516

Q

从格林威治时间 1970-01-01 00:00:00 起的毫秒数

1490670052093

从上表中可以看出来,有些格式只给出了指定日期的部分信息,例如只给出月份或者日期。如果需要多次对日期操作才能实现对每一部分日期进行格式化的目的就太 low 啦!因此,咱们可以采用一个格式化的字符串,指出要被格式化的“参数索引”。索引必须紧跟在%的后面,并以$终止。例如,

代码语言:javascript
复制
System.out.printf("%1$s %2$tB %2$te %2$tY","Due Date:",new Date());

其输出结果为:

咱们可以选择使用<标志,她表示前面格式说明中的参数将被再次使用。也就是说,下面的代码将产生与前面语句同样的输出结果:

代码语言:javascript
复制
System.out.printf("%s %tB %<te %<tY","Due Date:",new Date());

提示:参数索引从 1 开始,而不是从 0 开始,%1$,表示对第 1 个参数格式化。


最后,在此给出“ 格式说明符 ”的语法规则:

内容不多,但也希望能够对大家理解格式化输出有些帮助。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/156845.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 前言
  • 2 数值
  • 3 日期
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档