Java核心技术卷I基础知识3.7.2 格式化输出

简介:

3.7.2 格式化输出


可以使用System.out.print(x)将数值x输出到控制台上。这条命令将以x对应的数据类型所允许的最大非0数字位数打印输出x。例如:

 

打印

 

如果希望显示美元、美分等符号,则有可能会出现问题。

在早期的Java版本中,格式化数值曾引起过一些争议。庆幸的是,Java SE 5.0沿用了C语言库函数中的printf方法。例如,调用

 

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

 

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

 

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

表3-5 用于printf的转换符

转换符  类  型     举  例     转换符  类  型     举  例

d    十进制整数  159 s    字符串  Hello

x    十六进制整数    9f   c    字符     H

o    八进制整数  237 b    布尔     True

f     定点浮点数  15.9     h    散列码  42628b2

e    指数浮点数  1.59e+01    tx或Tx 日期时间(T强制大写) 已经过时,应当改为使用java.time类,参见卷Ⅱ第6章

g    通用浮点数  —  %   百分号  %

a    十六进制浮点数 0x1.fccdp3  n    与平台有关的行分隔符    —

 

另外,还可以给出控制格式化输出的各种标志。表3-6列出了所有的标志。例如,逗号标志增加了分组的分隔符。即

 

打印

 

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

表3-6 用于printf的标志

标  志     目  的     举  例

+   打印正数和负数的符号    +3333.33

空格     在正数之前添加空格 |  3333.33|

0    数字前面补0     003333.33

-     左对齐  |3333.33  |

(    将负数括在括号内    (3333.33)

,   添加分组分隔符 3,333.33

#(对于f格式)      包含小数点  3,333.

#(对于x或0格式)     添加前缀0x或0 0xcafe

d,%1$x将以十进制和十六进制格式打印第1个参数  159  9F

<   格式化前面说明的数值。例如,%d%<x以十进制和十六进制打印同一个数值     159  9F

 

      注释:可以使用s转换符格式化任意的对象。对于任意实现了Formattable接口的对象都将调用formatTo方法;否则将调用toString方法,它可以将对象转换为字符串。在第5章中将讨论toString方法,在第6章中将讨论接口。

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

 

基于完整性的考虑,下面简略地介绍printf方法中日期与时间的格式化选项。在新代码中,应当使用卷Ⅱ第6章中介绍的java.time包的方法。不过你可能会在遗留代码中看到Date类和相关的格式化选项。格式包括两个字母,以t开始,以表3-7中的任意字母结束。

例如,

 

这条语句将用下面的格式打印当前的日期和时间:

 

表3-7 日期和时间的转换符

转换符  类  型     举  例

c    完整的日期和时间    Mon Feb 09

18:05:19 PST

2015

F    ISO 8601日期   2015-02-09

D    美国格式的日期(月/日/年) 02/09/2015

T    24小时时间 18:05:19

r     12小时时间 06:05:19 pm

R    24小时时间没有秒   18:05

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

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

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

B    月的完整拼写    February

b或h    月的缩写     Feb

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

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

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

A    星期几的完整拼写    Monday

a    星期几的缩写    Mon

j     三位数的年中的日子(前面补0),在001到366之间  069

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

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

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

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

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

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

L    三位数字的毫秒(前面补0) 047

N    九位数字的毫微秒(前面补0)    047000000

p    上午或下午的标志    pm

z    从GMT起,RFC822数字位移      -0800

Z    时区     PST

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

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

 

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

 

打印

 

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

 

      提示:参数索引值从1开始,而不是从0开始,%1$...对第1个参数格式化。这就避免了与0标志混淆。

现在,已经了解了printf方法的所有特性。图3-6给出了格式说明符的语法图。

 

图3-6 格式说明符语法

      注释:许多格式化规则是本地环境特有的。例如,在德国,组分隔符是句号而不是逗号,Monday被格式化为Montag。在卷Ⅱ第5章中将介绍如何控制应用的国际化行为。

目录
打赏
0
0
0
0
1408
分享
相关文章
单位网络监控软件:Java 技术驱动的高效网络监管体系构建
在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
95 11
Java注解的底层源码剖析与技术认识
Java注解(Annotation)是Java 5引入的一种新特性,它提供了一种在代码中添加元数据(Metadata)的方式。注解本身并不是代码的一部分,它们不会直接影响代码的执行,但可以在编译、类加载和运行时被读取和处理。注解为开发者提供了一种以非侵入性的方式为代码提供额外信息的手段,这些信息可以用于生成文档、编译时检查、运行时处理等。
100 7
智慧产科一体化管理平台源码,基于Java,Vue,ElementUI技术开发,二开快捷
智慧产科一体化管理平台覆盖从备孕到产后42天的全流程管理,构建科室协同、医患沟通及智能设备互联平台。通过移动端扫码建卡、自助报道、智能采集数据等手段优化就诊流程,提升孕妇就诊体验,并实现高危孕产妇五色管理和孕妇学校三位一体化管理,全面提升妇幼健康宣教质量。
52 12
SaaS云计算技术的智慧工地源码,基于Java+Spring Cloud框架开发
智慧工地源码基于微服务+Java+Spring Cloud +UniApp +MySql架构,利用传感器、监控摄像头、AI、大数据等技术,实现施工现场的实时监测、数据分析与智能决策。平台涵盖人员、车辆、视频监控、施工质量、设备、环境和能耗管理七大维度,提供可视化管理、智能化报警、移动智能办公及分布计算存储等功能,全面提升工地的安全性、效率和质量。
CRaC技术助力ACS上的Java应用启动加速
容器计算服务借助ACS的柔性算力特性并搭配CRaC技术极致地提升Java类应用的启动速度。
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
2815 2
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
121 7
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
207 1
【技术开发】接口管理平台要用什么技术栈?推荐:Java+Vue3+Docker+MySQL
该文档介绍了基于Java后端和Vue3前端构建的管理系统的技术栈及功能模块,涵盖管理后台的访问、登录、首页概览、API接口管理、接口权限设置、接口监控、计费管理、账号管理、应用管理、数据库配置、站点配置及管理员个人设置等内容,并提供了访问地址及操作指南。
java-ajax技术详解!!!
本文介绍了Ajax技术及其工作原理,包括其核心XMLHttpRequest对象的属性和方法。Ajax通过异步通信技术,实现在不重新加载整个页面的情况下更新部分网页内容。文章还详细描述了使用原生JavaScript实现Ajax的基本步骤,以及利用jQuery简化Ajax操作的方法。最后,介绍了JSON作为轻量级数据交换格式在Ajax应用中的使用,包括Java中JSON与对象的相互转换。
94 1