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);
示例
以不同方式格式化浮点数:
// 默认
System.out.printf("%f%n", 123456.78);
// 保留两位小数
System.out.printf("%.2f%n", 123456.78);
// 不保留小数
System.out.printf("%.0f%n", 123456.78);
// 保留小数点,但不保留小数
System.out.printf("%#.0f%n", 123456.78);
// 分组显示数字
System.out.printf("%.2f%n", 123456.78);
// 精确到两位有效数字的科学计数法
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 时间戳(自 1970 年 1 月 1 日以来的毫秒数)
// Time
System.out.printf("%tl:%<tM %<tp%n", date);
// Month and day
System.out.printf("%tB %<te%n", date);
// 完整日期表示
System.out.printf("%tc%n", date);
示例
根据 Unicode 代码点表示字符:
// 根据 Unicode 代码点表示字符
System.out.printf("%c%c%c%c%c%n", 72, 101, 108, 108, 111);
// 强制将 Unicode 字符转换为大写
System.out.printf("%C%C%C%C%C", 72, 101, 108, 108, 111);
❮ 输出方法

