详述 Java 语言中的格式化输出
1 前言
相信大家在学习 Java 语言的时候,见到的第一条输出语句,就是:
System.out.println("Hello World");
毫无疑问,该语句的作用就是将Hello World
打印到控制台,格式也非常的简单,直接按原格式输出。
但是,如果将输出的内容换成“数值”或者“日期”呢?其打印的格式是否会有什么不同的变化呢?接下来,就让咱们一起看一看在 Java 语言中,数值和日期是如何进行格式化输出的。
2 数值
首先,给出代码示例:
/*** @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 日期
首先,给出代码示例:
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 啦!因此,咱们可以采用一个格式化的字符串,指出要被格式化的“参数索引”。索引必须紧跟在%
的后面,并以$
终止。例如,
System.out.printf("%1$s %2$tB %2$te %2$tY","Due Date:",new Date());
其输出结果为:
咱们可以选择使用<
标志,她表示前面格式说明中的参数将被再次使用。也就是说,下面的代码将产生与前面语句同样的输出结果:
System.out.printf("%s %tB %<te %<tY","Due Date:",new Date());
提示:参数索引从 1 开始,而不是从 0 开始,%1$
,表示对第 1 个参数格式化。
最后,在此给出“ 格式说明符 ”的语法规则:
内容不多,但也希望能够对大家理解格式化输出有些帮助。
详述 Java 语言中的格式化输出相关推荐
- c语言中用于格式化输出的函数,C语言中格式化输入输出函数(转)
1.1.1 格式化输入输出函数 一.printf()函数 printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出 信息.在编写程序时经常会用到此函数.printf()函数的调用格 ...
- C语言中不同格式化输出的含义(%e、%g、%u、%hd)等
%d:整型输出,%ld长整型输出 %o:以八进制数形式输出整数,打印的是无符号类型 %x:以十六进制数形式输出整数,%X以大写字母输出,打印的是无符号类型 %u:以十进制数输出unsigned型数据( ...
- Java 1.2.2 格式化输出
System.out.printf( ) 在早期的 Java 版本中,格式化数值曾引起过一些争议.后来Java SE 5.0 沿用了 C 语言库函数中的 printf方法. 每一个以 %字符开始的格式 ...
- Java语言中的常用包、访问控制
Java常用的语言包 Java的核心类都放在Java包以及其子包下,Java扩展的许多类都放在Javax包以及其子包下.这些实用类也就是前面所说的API(应用程序接口),Oracle按这些类的功能分别 ...
- JAVA语言中数字、字符和字符串处理
前言: JAVA语言中针对数字.数学运算.字符.字符串有专门的类,分别是Number.Math.Character和String. 1.数字: JAVA对数字处理的相关方法被封装在java.lang包 ...
- Java语言中的生僻知识
最近有一首名叫<生僻字>的流行歌曲火遍大江南北,创作者给佶屈聱牙的生僻字,配上了优美明快的旋律,竟然让歌曲变得琅琅上口.悦耳动听起来,平时不太常见的拒人于千里之外的这些汉字也不再那么陌生, ...
- java printwriter format_Java的格式化输出
在JavaSe5中,推出了C语言中printf()风格的格式化输出.这不仅使得控制输出的代码更加简单,同时也给与Java开发者对于输出格式与排列更大的控制能力.今天,我们开始学习Java中的格式化输出 ...
- Java 语言中十大“坑爹”功能!
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源:https://www.sohu.com/a/35 ...
- spring 数据库 链接db2_Druid,Java语言中最好的数据库连接池
Druid是Java语言中最好的数据库连接池,这话不是我说的,是Druid官方文档自己这样描述的,这是何等的自信! 连接池的作用,跟线程池的作用大同小异,都是为了减少频繁的创建销毁连接IO,提升性能. ...
最新文章
- java AST 表达式_java 编译时注解-AST 抽象语法树简介
- 用JSP实现上传文件的两种方法
- Codeforces 982 C. Cut 'em all!(dfs)
- 2016年2月工作日志
- Shadow Properties之美(二)【Microsoft Entity Framework Core随笔】
- 信号 09 | 信号概念
- 在线图表分析制作_(漂亮)象形柱状图表制作 在线图表制作工具
- Python处理json字符串转化为字典
- 安装sql server2012报错
- 社会工程学案例调研和研究
- 三面网易,四面阿里,五年开发经验程序员剑指大厂,稳拿P7offer
- vue图片裁切cropperjs的使用
- 自动驾驶技术基础——惯导
- oracle11g和toad,plsql、toad应用于oracle11g64位的方法
- 给hotmail邮箱发信(status=deferred)解决办法
- Docker+Ovs构建SDN网络
- package有什么作用
- 软件测试的定义、分类、方法、生命周期
- 如何制作电子印章?电脑做印章最简单的方法是什么?
- ORC 之 C++ 之 Reader