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()的区别是什么?

  1. String.format()返回一个格式化的字符串。System.out.printf()不仅格式化字符串,还会将其打印到控制台。
  2. 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()方法可以进行的各种格式化选项。

bannerAds