Java中的printf()函数 – 将格式化的字符串打印到控制台

我们之前已经讨论了Java中的println()方法。今天,我们将详细讨论printf()方法及其不同的实现方式。准备好了吗?开始吧!

Java printf() 可以用中文翻译为“Java 打印格式化输出”。

  • printf() method is not only there in C, but also in Java.
  • This method belongs to the PrintStream class.
  • It’s used to print formatted strings using various format specifiers.

语法

以下是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()也会将格式化的字符串打印到控制台。

 

    printf()使用java.util.Formatter类来解析格式字符串并生成输出。

格式指示符

让我们来看一下printf函数可用的格式说明符有哪些。

  • %c character
  • %d decimal (integer) number (base 10)
  • %e exponential floating-point number
  • %f floating-point number
  • %i integer (base 10)
  • %o octal number (base 8)
  • %s String
  • %u unsigned decimal (integer) number
  • %x number in hexadecimal (base 16)
  • %t formats date/time
  • %% print a percent sign
  • \% print a percent sign

注意:在printf()中,%n或\n被用作换行符。

转义字符

以下是在printf()中可用的转义字符:

  • \b backspace
  • \f next line first character starts to the right of current line last character
  • \n newline
  • \r carriage return
  • \t tab
  • \\ backslash

格式说明符完整语法

让我们来看一下具有扩展集的格式说明符的完整语法。

%<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("Formatted output is: %d %d%n", x, -x)
Formatted output is: 10 -10

让我们使用一些精确的格式化:

jshell> float y = 2.28f
y ==> 2.28

jshell> System.out.printf("Precision formatting upto 4 decimal places %.4f\n",y)

Precision formatting upto 4 decimal places 2.2800

jshell> float z = 3.147293165f
z ==> 3.147293

jshell> System.out.printf("Precision formatting upto 2 decimal places %.2f\n",z)

Precision formatting upto 2 decimal places 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","Hello","World");
Hello World!
jshell> System.out.printf("%s\f%s!%n","Hello","World!");
Hello
     World!!
jshell> System.out.printf("%s\\%s!%n","Hello","World!");
Hello\World!!

大写的(文字)

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("H : %tH, M: %tM, S: %tS%n",date,date,date)
H : 02, M: 15, S: 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", "Current date: ", date);
Current 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", "Current date: ", date);
Current date:  Apr 19, 19

结论。

在本教程中,我们讨论了使用printf()方法可以进行的各种格式化选项。

发表回复 0

Your email address will not be published. Required fields are marked *


广告
将在 10 秒后关闭
bannerAds