【简介】
printf System.out.printf() 是 Java 5 开始引入的,用法类似 C语言的 printf() 函数。
目录
【API】
①PrintStream printf(Locale l, String format, Object... args)
使用指定的格式字符串和参数将格式化的字符串写入此输出流的便利方法。
②PrintStream printf(String format, Object... args)
使用指定的格式字符串和参数将格式化的字符串写入此输出流的便利方法。
1.format 格式:%[argument_index$][flags][width][.precision]conversion
①argument_index:是十进制的整数,表示参数列表中第i个参数。 举例:System.out.printf("%1$s %2$tB %2$te, %2$tY","Due date:",new Date()); 说明:1$表示第一个参数,也就是"Due date:" ②flags:指定格式化输出外观的各种标志。 ③width:是十进制整数,表示输出的字符个数。 举例:double x=33.3; System.out.printf("%5.2f",x); 输出为:33.30 说明:对于浮点数,包含小数点所占的一个字符和符号所占的一个字符。当实际的字符数小于指定的宽度时,根据上个参数flags指定的标志进行填充,如未指定,默认为空格。 ④precision:是非负十进制整数,通常用于限制字符数。如上例。 ⑤conversion:(必须)是一个字符,指定格式化参数。 举例:
@Test
public void printfTest(){
// System.out.printf("%tc",new Date());
double x=19668889.999999;
int y=-100;
System.out.printf("%,9.2f",x);//19,668,890.00
System.out.println();
System.out.printf("%+9.2f",x);//+19668890.00
System.out.println();
System.out.printf("%(d",y);//(100)
System.out.println();
System.out.printf("%+d",y);//-100
}
@Test
public void dateTest(){
Date date=new Date();
System.out.printf("%tc \n",date);//星期五 三月 18 09:34:35 CST 2022
System.out.printf("%tF \n",date);//2022-03-18
System.out.printf("%tD \n",date);//03/18/22
System.out.printf("%tT \n",date);//09:34:35
System.out.printf("%tr \n",date);//09:34:35 上午
System.out.printf("%tR \n",date);//09:34
System.out.printf("%tY \n",date);//2022
System.out.printf("%ty \n",date);//22
System.out.printf("%tC \n",date);//20
System.out.printf("%tB \n",date);//三月
System.out.printf("%tb \n",date);//三月
System.out.printf("%tm \n",date);//03
System.out.printf("%td \n",date);//18
System.out.printf("%te \n",date);//18
System.out.printf("%tA \n",date);//星期五
System.out.printf("%ta \n",date);//星期五
System.out.printf("%tj \n",date);//077
System.out.printf("%tH \n",date);//09
System.out.printf("%tk \n",date);//9
System.out.printf("====%tI \n",date);//09
System.out.printf("%tl \n",date);//9
System.out.printf("%tM \n",date);//39
System.out.printf("%tS \n",date);//05
System.out.printf("%tL \n",date);//920
System.out.printf("%tN \n",date);//920000000
System.out.printf("%tp \n",date);//上午
System.out.printf("%tz \n",date);//+0800
System.out.printf("%tZ \n",date);//CST
System.out.printf("%ts \n",date);//1647567545
System.out.printf("%tQ \n",date);//1647567545920
}
2.local 数字和日期的格式化规则是特定本地化环境的,local主要用于控制国际化行为。
举例:
@Test
public void test2(){
System.out.printf(Locale.JAPAN,"%tc",new Date());//金 3 18 15:40:29 CST 2022
System.out.println();
System.out.printf(Locale.UK,"%tc",new Date());//Fri Mar 18 15:40:29 CST 2022
System.out.println();
System.out.printf(Locale.getDefault(),"%tc",new Date());//星期五 三月 18 15:40:29 CST 2022
System.out.println();
System.out.printf(Locale.CANADA,"%tc",new Date());//Fri Mar 18 15:42:22 CST 2022
System.out.println();
System.out.printf(Locale.TAIWAN,"%tc",new Date());//星期五 三月 18 15:42:22 CST 2022
System.out.println();
System.out.printf(Locale.FRANCE,"%tc",new Date());//ven. mars 18 15:42:22 CST 2022
System.out.println();
System.out.printf(Locale.ITALY,"%tc",new Date());//ven mar 18 15:42:22 CST 2022
}
3.args 格式字符串中引用的参数
举例:
@Test
public void test(){
System.out.printf("%1$s %2$tB %2$te, %2$tY","Due date:",new Date());//Due date: 三月 18, 2022
System.out.printf("%2$tB %2$te, %2$tY","Due date:",new Date());//三月 18, 2022
}
【附录:flags标志说明】
标志 | 目的 | 示例 |
空格 | 在正数之前添加空格 | | 3333.33| |
0 | 数字前面补0 | 003333.33 |
+ | 打印正数和负数的符号 | +3333.33 |
- | 左对齐(不指定-时,默认为右对齐) | |3333.33 | |
( | 将负数括在括号内 | -100 输出为(100) |
,(英文逗号) | 添加分组分隔符,只对定点浮点数整数部分添加分组分隔符,小数部分不会添加 | 3,333.33 |
#(对于f格式) | 包含小数点 | 3,333. |
#(对于x或o格式) | 添加前缀0x或0 | 0xcafe |
$ | 指定要格式化的参数索引。例如,%1 d d %1 dx 将以十进制和十六进制格式打印第1个参数 | 159 9F |
< | <格式化前面说明的数值。例如,%d<%x 将以十进制和十六进制打印同一个值 | 159 9F |
【附录:conversion转换符说明】
注:下面的转换符前面都必须用 t/T 修饰。
转换符 | 类型 | 示例 |
d | 十进制整数 | 159 |
x | 十六进制整数 | 9f |
o | 八进制整数 | 237 |
f | 定点浮点数 | 1.59e+01 |
e | 指数浮点数 | |
g | 通用浮点数(e和f中较短的一个) | |
a | 16进制浮点数 | 0x1.fccdp3 |
s | 字符串 | hello |
c | 字符 | H |
b | 布尔 | true |
n | 与平台有关的换行符 | |
h | 散列码 | 42628b2 |
tx或Yx | 日期时间(T强制大写) | 已过时,建议使用 java.time 类。 |
% | 百分号 | % |
【附录:日期时间转换符说明】
转换符 | 类型 | 示例 |
c | 完整的日期和时间 | 星期五 三月 18 09:34:35 CST 2022 |
F | 年月日 | 2022-03-18 |
D | 月/日/年 | 03/18/22 |
T | 24小时时间 | 09:34:35 |
r | 12小时时间 | 09:34:35 上午 |
R | 24小时时间,没有秒 | 09:34 |
Y | 4位数字的年(前面补0) | 2022 |
y | 年的后两位数字(前面补0) | 22 |
C | 年的前两位数字(前面补0) | 20 |
B | 月的完整拼写 | 三月 |
b | 月的缩写 | 三月 |
m | 两位数字的月(前面补0) | 03 |
d | 两位数字的日(前面补0) | 18 |
e | 两位数字的日(前面不补0) | 18 |
A | 星期几的完整拼写 | 星期五 |
a | 星期几的缩写 | 星期五 |
j | 三位数的年中第几天(前面补0),在001到366之间 | 077 |
H | 两位数字的小时(前面补0),在0到23之间 | 09 |
k | 两位数字的小时(前面不补0),在0到23之间 | 9 |
I(大写i) | 两位数字的小时(前面补0),在01到12之间 | 09 |
l(小写L) | 两位数字的小时(前面不补0),在1到12之间 | 9 |
M | 两位数字的分钟(前面补0) | 39 |
S | 两位数字的秒(前面补0) | 05 |
L | 三位数字的毫秒(前面补0) | 920 |
N | 九位数字的毫微秒(前面补0) | 920000000 |
p | 上午或下午的标志 | 上午 |
z | 从 GMT 起,RFC 822 数字位移 | +0800 |
Z | 时区 | CST |
s | 从格林尼治时间 1970-01-01 00:00:00 起的秒数 | 1647567545 |
Q | 从格林尼治时间 1970-01-01 00:00:00 起的毫秒数 | 164756754592 |