Java Formatter用法

  • Post author:
  • Post category:java




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 格式说明


  • argument_index$

    :指定对应的内容参数位置,默认按照顺序依次对应。

  • flags

    :格式控制。

  • width

    :区域宽度。

  • .precision

    :对于浮点型数据,表示显示的小数位数;对于字符串数据,表示显示的字符数量。

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


相关文章




Java Calendar用法





Java SimpleDateFormat用法





Java Formatter用法





Java Pattern和Matcher用法





Java DecimalFormat用法