本文目录

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;
}