Java printf()函数完全指南:格式化字符串输出技巧与实例
我们之前已经讨论了Java中的println()方法。今天,我们将详细讨论printf()方法及其不同的实现方式。准备好了吗?开始吧!
Java printf() 可以用中文翻译为”Java 打印格式化输出”。
- printf()方法不仅在C语言中存在,在Java中也有。
- 该方法属于PrintStream类。
- 它用于使用各种格式说明符打印格式化字符串。
语法
以下是printf()方法可用的语法:
System.out.printf(string);
System.out.printf(format, arguments);
System.out.printf(locale, format, arguments);
第一种语法不需要任何格式化,就像println()方法一样。
System.out.format()和System.out.printf()方法是相同的。
String.format()和System.out.printf()的区别是什么?
- String.format()返回一个格式化的字符串。System.out.printf()不仅格式化字符串,还会将其打印到控制台。
- printf()使用java.util.Formatter类来解析格式字符串并生成输出。
格式指示符
让我们来看一下printf函数可用的格式说明符有哪些。
- %c – 字符
- %d – 十进制(整数)数字(基数为10)
- %e – 指数形式的浮点数
- %f – 浮点数
- %i – 整数(基数为10)
- %o – 八进制数(基数为8)
- %s – 字符串
- %u – 无符号十进制(整数)数字
- %x – 十六进制数(基数为16)
- %t – 格式化日期/时间
- %% – 打印百分号
- \% – 打印百分号
注意:在printf()中,%n或\n被用作换行符。
转义字符
以下是在printf()中可用的转义字符:
- \b – 退格
- \f – 换页,下一行的第一个字符从当前行最后一个字符的右侧开始
- \n – 换行
- \r – 回车
- \t – 制表符
- \\ – 反斜杠
格式说明符完整语法
让我们来看一下具有扩展集的格式说明符的完整语法。
%<flags><width><.precision>specifier
在格式说明符中,使用”+”可以右对齐,使用”-“可以左对齐。接下来,启动您的Jshell并开始使用printf()!
数字格式化
这里有一个例子:
| Welcome to JShell -- Version 12.0.1
| For an introduction type: /help intro
jshell> int x = 10
x ==> 10
jshell> System.out.printf("格式化输出为: %d %d%n", x, -x)
格式化输出为: 10 -10
让我们使用一些精确的格式化:
jshell> float y = 2.28f
y ==> 2.28
jshell> System.out.printf("精确格式化到4位小数 %.4f\n",y)
精确格式化到4位小数 2.2800
jshell> float z = 3.147293165f
z ==> 3.147293
jshell> System.out.printf("精确格式化到2位小数 %.2f\n",z)
精确格式化到2位小数 3.15
正如您所看到的,在第二种情况下,它会四舍五入到下一个小数位。
宽度说明符、对齐、以零填充
在本节中,我们将为每个例子提供三个示例。
jshell> System.out.printf("'%5.2f'%n", 2.28);
' 2.28'
如您所见,宽度指定符分配了五个字符宽度。默认情况下,内容右对齐。空白处可以使用零填充,如下所示:
jshell> System.out.printf("'%05.2f'%n", 2.28);
'02.28'
jshell> System.out.printf("'%010.2f'%n", 2.28);
'0000002.28'
jshell> System.out.printf("'%010.2f'%n", -2.28);
'-000002.28'
jshell> System.out.printf("'%010.2f'%n", 1234567.89);
'1234567.89'
jshell> System.out.printf("'%010.2f'%n", -1234567.89);
'-1234567.89'
默认情况下对齐方式为右对齐,使用+符号表示。
jshell> System.out.printf("'%10.2f'%n", 2.28);
' 2.28'
下面的代码靠左对齐。
jshell> System.out.printf("'%-10.2f'%n", 2.28);
'2.28 '
使用逗号和地域:
jshell> System.out.printf(Locale.US, "%,d %n", 5000);
5,000
字符串和布尔型格式化
让我们来看一下使用一些基本示例进行字符串格式化:
jshell> System.out.printf("%s %s!%n","你好","世界");
你好 世界!
jshell> System.out.printf("%s\f%s!%n","你好","世界!");
你好
世界!!
jshell> System.out.printf("%s\\%s!%n","你好","世界!");
你好\世界!!
大写转换:
jshell> System.out.printf("%s %S!%n","Hello","World");
Hello WORLD!
下面给出了布尔格式化的示例。
jshell> System.out.printf("%b%n", false);
false
jshell> System.out.printf("%b%n", 0.5);
true
jshell> System.out.printf("%b%n", "false");
true
时间格式化
“H”表示小时,”M”表示分钟,”S”表示秒。’L’和’N’分别用来表示毫秒和纳秒的时间。’p’表示上午/下午。’z’打印出与格林尼治标准时间的差异。
jshell> Date date = new Date();
date ==> Fri Apr 19 02:15:36 IST 2019
jshell> System.out.printf("%tT%n", date);
02:15:36
jshell> System.out.printf("小时 : %tH, 分钟: %tM, 秒: %tS%n",date,date,date)
小时 : 02, 分钟: 15, 秒: 36
后者需要很多相同的参数。相反,我们可以用一个参数来替换它们。
jshell> System.out.printf("%1$tH:%1$tM:%1$tS %1$Tp GMT %1$tz %n", date)
02:15:36 AM GMT +0530
日期格式化
日期格式有下列特殊字符:
A/a – 完整的星期(全称/缩写)
B/b – 完整的月份(全称/缩写)
d – 格式化为两位数的日期
m – 格式化为两位数的月份
Y – 完整的年份/年份的最后两位数字
j – 一年中的第几天
jshell> System.out.printf("%s %tB %<te, %<tY", "当前日期: ", date);
当前日期: April 19, 2019
jshell> System.out.printf("%1$td.%1$tm.%1$ty %n", date);
19.04.19
jshell> System.out.printf("%s %tb %<te, %<ty", "当前日期: ", date);
当前日期: Apr 19, 19
结论
在本教程中,我们讨论了使用printf()方法可以进行的各种格式化选项。