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()的区别是什么?
-
- 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()方法可以进行的各种格式化选项。