Java 输出 printf() 方法
注意: 你会在页面底部找到更多“自己动手”的示例。
定义和用法
printf()
方法输出一个格式化的字符串。
附加参数中的数据被格式化并写入格式化字符串中的占位符,这些占位符用 %
符号标记。参数的格式化方式取决于 %
符号后面的字符序列。
占位符
占位符的形式为 %[arg$][flags][width][.precision]conversion
。方括号 [ ] 中的部分是可选的。
每个组件的解释
arg$
- 可选。一个数字后跟一个 $ 符号,表示使用哪个附加参数,参数编号从 1 开始。这可以用<
替换,表示使用前一个占位符的参数。flags
- 可选。以下任意字符的序列-
- 使输出左对齐,通过在右侧添加填充空格而不是左侧。+
- 使正数始终以 "+" 作为前缀。0
- 用零填充数字的左侧。,
- 对数字进行分组(例如按千位)并在组之间放置分隔符。
width
- 可选。一个整数,指定输出应占用的最小字符数。如有必要,在右侧添加空格以达到此数字,如果使用了-
标志,则在左侧添加空格。.precision
可选。一个.
后跟一个整数,表示在格式化数据中显示多少个小数位数。conversion
- 必需。一个字符,表示参数的数据应如何表示。如果字符是大写,则数据将在可能的情况下以大写格式显示。可能的字符列表如下表所示。
转换列表
字符 | 转换 | 描述 |
---|---|---|
% |
百分比 | 在输出中显示字面意义上的 "%" 字符。 |
n |
换行 | 在输出中显示换行符。 |
b 或 B |
布尔值 | 将布尔值参数显示为 "true" 或 "false"。如果使用 "B",则显示 "TRUE" 或 "FALSE"。 |
c 或 C |
Unicode 字符 | 显示参数的 Unicode 字符表示。对于整数,这是与数字对应的 Unicode 字符。如果使用 "C",则字符将在可能的情况下转换为大写。 |
s 或 S |
字符串 | 显示参数的默认字符串表示。如果使用 "S",则字符串将转换为大写(在可能的情况下)。 |
d |
十进制整数 | 将整数表示为十进制整数。 |
h 或 H |
无符号十六进制整数 | 将参数的二进制数据表示为无符号十六进制整数。如果使用 "H",则 A 到 F 的数字将显示为大写。 注意: 对于任何非正整数数据,这并不代表其真实值。 |
o |
八进制整数 | 将整数表示为八进制整数。 "#" 标志将用 "0" 作为前缀。 |
x 或 X |
十六进制整数 | 将整数表示为十六进制整数。 "#" 标志将用 "0x" 作为前缀。如果使用 "X",则数字 A 到 F 以及字母 X 将以大写形式显示。 |
e 或 E |
科学计数法 | 以科学计数法表示浮点数。如果使用 "E",则表示中的字母 "E" 将是大写。 "#" 标志将强制显示小数点,即使没有小数位数。 |
f |
浮点数 | 表示一个浮点数。 "#" 标志将强制显示小数点,即使没有小数位数。 |
g 或 G |
通用数字 | 显示浮点数的 f 和 e 或 E 之间最短的表示形式。 |
a 或 A |
十六进制浮点数 | 以十六进制数字显示浮点数的内部表示。 |
t 或 T |
时间和日期 | 显示格式化的日期或时间。t 或 T 后面必须跟一个额外的字符,指示日期或时间的格式。如果使用 "T",则日期或时间中的文本部分(如 "JANUARY")将是大写。 以下字符可用于日期和时间格式化
|
语法
System.out.printf(locale, formatString, args)
参数值
参数 | 描述 |
---|---|
locale | 可选。一个用于确定某些格式的区域设置,例如用于小数点和分组分隔符的字符。 |
formatString | 必需。一个包含附加参数占位符的字符串,指示如何格式化它们 |
args | 可选。任意数量的附加参数传递给方法,它们的值可以在 *formatString* 中进行格式化和显示。 |
技术详情
返回 | 一个 PrintStream 对象。 |
---|---|
抛出 | IllegalFormatException - 如果格式字符串包含无效的占位符,或者占位符与参数的数据类型不兼容。 |
Java 版本 | 1.5 |
更多示例
示例
打印包含字符串和整数的格式化文本
System.out.printf("Hello %s! One kilobyte is %,d bytes.", "World", 1024);
示例
以不同方式格式化浮点数
// Default
System.out.printf("%f%n", 123456.78);
// Two decimal digits
System.out.printf("%.2f%n", 123456.78);
// No decimal digits
System.out.printf("%.0f%n", 123456.78);
// No decimal digits but keep the decimal point
System.out.printf("%#.0f%n", 123456.78);
// Group digits
System.out.printf("%,.2f%n", 123456.78);
// Scientific notation with two digits of precision
System.out.printf("%.2e", 123456.78);
示例
使用所有组件的占位符
System.out.printf("%2$,3.2f %1$s", "meters", 1260.5052);
这是占位符 %2$,3.2f
各部分的工作原理
2$
表示使用第二个参数的值,
表示数字应分组(通常按千位)3
表示数据的表示形式应至少为 3 个字符长.2
表示小数点后应有两位数字f
表示数据被表示为浮点数
示例
从 Unix 时间戳格式化日期
long date = 1711638903488L; // Unix timestamp (number of milliseconds since January 1, 1970)
// Time
System.out.printf("%tl:%<tM %<tp%n", date);
// Month and day
System.out.printf("%tB %<te%n", date);
// Full date representation
System.out.printf("%tc%n", date);
示例
根据 Unicode 代码点表示字符
// Represent characters from their unicode code points
System.out.printf("%c%c%c%c%c%n", 72, 101, 108, 108, 111);
// Force unicode characters to uppercase
System.out.printf("%C%C%C%C%C", 72, 101, 108, 108, 111);
❮ 输出方法