本文目录

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;
}
 
来源:CSDN
原文:https://blog.csdn.net/cuixianlong/article/details/78583186
版权声明:本文为博主原创文章,转载请附上博文链接!

posted on 2018-10-26 10:59  暮雨晨光  阅读(1427)  评论(0编辑  收藏  举报