本文目录
1 Formatter类
2 格式化说明符
3 其它相关方法
1 Formatter类
1.1 使用方法
Formatter formatter = new Formatter([destination]);
formatter.format(String format, Object…args);
1.2 使用说明
(1)Formatter构造参数:
若无参数,格式化后的字符串会被存放在一个内部的StringBuffer中,此后,可通过formatter.toString()方法返回格式化后的字符串。
// 无参数构造Formatter对象
Formatter formatter = new Formatter();
// 格式化操作
formatter.format("The result number is %d.", 7);
// 获得格式化后的字符串
String str = formatter.toString();
// 控制台输出内容:The result number is 7.
System.out.println(str);
若有参数,该参数表示要输出的目标位置,可以是一个StringBuffer对象,一个文件,或一个数据流,此后,格式化的字符串将直接输出到指定位置。
// 构造Formatter对象并指向标准输出流
Formatter formatter = new Formatter(System.out);
// 格式化并输出到指定位置(控制台输出内容:The result number is 7.)
formatter.format("The result number is %d.", 7);
(2)format方法参数:
String format
是一个包含格式化说明符的字符串,该字符串指定了整体目标格式,通过格式化说明符进行占位并指定相应位置的内容格式;
Object… args
表示多个参数对象,其内容将依次对应format中的占位符(格式化说明符),根据指定的内容格式填充到指定位置,从而形成一个满足要求的字符串。
2 格式化说明符
2.1 格式
%[argument_index$][flags][width][.precision]conversion
2.2 格式说明
(1)argument_index$:指定对应的内容参数位置,默认按照顺序依次对应。
(2)flags:格式控制。
(3)width:区域宽度。
(4).precision:对于浮点型数据,表示显示的小数位数;对于字符串数据,表示显示的字符数量。
(5)conversion:类型转换字符。
2.3 格式控制(flags)
符号 | 作用 | 示例 | 效果 |
无负号 | 右对齐 | formatter.format("***%8d***", 1000); | *** 1000*** |
有负号“-” | 左对齐 | formatter.format("***%-8d***", 1000); | ***1000 *** |
有加号“+” | 正数前显示正号 负数前显示负号 | formatter.format("***%+8d***", 1000); formatter.format("***%+8d***", -1000); | *** +1000*** *** -1000*** |
有空格“ ” | 正数前显示空格 负号前显示负号 | formatter.format("***% 8d***", 1000); formatter.format("***% 8d***", -1000); | *** 1000*** *** -1000*** |
有零“0” | 使用0填充剩余位置 | formatter.format("***%08d***", 1000); | ***00001000*** |
有逗号“,” | 每3位数字添加一个逗号 | formatter.format("***%,8d***", 1000); | *** 1,000*** |
2.4 类型转换字符
符号 | 类型 | 示例 | 效果 |
d | 整数型(十进制) | formatter.format("%d", 1000); | 1000 |
o | 整数型(八进制) | formatter.format("%o", 1000); | 1750 |
x | 整数型(十六进制) | formatter.format("%x", 1000); | 3e8 |
f | 浮点型(十进制) | formatter.format("%f", 1000.0); | 1000.000000 |
e | 浮点型(科学计数) | formatter.format("%e", 1000.0); | 1.000000e+03 |
b | 布尔型 | formatter.format("%b", true); | true |
c | 字符型 | formatter.format("%c", 'A'); | A |
s | 字符串型 | formatter.format("%s", "String"); | String |
% | 字符“%” | formatter.format("%d%%", 100); | 100% |
2.5 时间类型转换字符
符号 | 类型 | 示例 | 效果 |
tC | 上世纪 | formatter.format("%tC", calendar); | 20 |
tY | 年(4位) | formatter.format("%tY", calendar); | 2017 |
ty | 年(2位) | formatter.format("%ty", calendar); | 17 |
tm | 月 | formatter.format("%tm", calendar); | 11 |
tB | 月份 | formatter.format("%tB", calendar); | November |
tb | 月份缩写 | formatter.format("%tb", calendar); | Nov |
td | 日(2位) | formatter.format("%td", calendar); | 20 |
te | 日 | formatter.format("%te", calendar); | 20 |
tA | 星期 | formatter.format("%tA", calendar); | Monday |
ta | 星期(缩写) | formatter.format("%ta", calendar); | Mon |
tH | 小时(24小时制)(2位) | formatter.format("%tH", calendar); | 18 |
tk | 小时(24小时制) | formatter.format("%tk", calendar); | 18 |
tI | 小时(12小时制)(2位) | formatter.format("%tI", calendar); | 06 |
tl | 小时(12小时制) | formatter.format("%tl", calendar); | 6 |
tM | 分钟 | formatter.format("%tM", calendar); | 10 |
tS | 秒 | formatter.format("%tS", calendar); | 22 |
tL | 毫秒 | formatter.format("%tL", calendar); | 490 |
tN | 微秒 | formatter.format("%tN", calendar); | 570000000 |
tp | 上午/下午 | formatter.format("%tp", calendar); | pm |
tz | 时区 | formatter.format("%tz", calendar); | +0800 |
tZ | 时区(缩写) | formatter.format("%tZ", calendar); | CST |
ts | 自1970-01-01 00:00的秒数 | formatter.format("%ts", calendar); | 1511172687 |
tQ | 自1970-01-01 00:00的毫秒数 | formatter.format("%tQ", calendar); | 1511172687297 |
tF | YYYY-MM-DD | formatter.format("%tF", calendar); | 2017-11-20 |
tD | MM/DD/YY | formatter.format("%tD", calendar); | 11/20/17 |
tR | HH:MM(24小时制) | formatter.format("%tR", calendar); | 18:11 |
tT | HH:MM:SS(24小时制) | formatter.format("%tT", calendar); | 18:11:27 |
tr | HH:MM:SS 上午/下午 | formatter.format("%tr", calendar); | 06:11:27 pm |
tc | 星期 月 日 HH:MM:SS YYYY | formatter.format("%tc", calendar); | Mon Nov 20 18:11:27 CST 2017 |
3 其它相关方法
3.1 String.format方法
该方法内部,实际上也是通过Formatter类进行格式化,然后,将格式化后的字符串返回,其内部代码如下:
public static String format(String format, Object... args) {
return new Formatter().format(format, args).toString();
}
3.2 System.out.format方法
该方法内部,也是通过Formatter类进行格式化,然后,将格式化后的字符串直接输出到System.out输出流,其内部代码如下:
public PrintStream format(String format, Object ... args) {
try {
synchronized (this) {
ensureOpen();
if ((formatter == null)
|| (formatter.locale() != Locale.getDefault()))
formatter = new Formatter((Appendable) this);
formatter.format(Locale.getDefault(), format, args);
}
} catch (InterruptedIOException x) {
Thread.currentThread().interrupt();
} catch (IOException x) {
trouble = true;
}
return this;
}