Java Formatter用法

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
tmformatter.format("%tm", calendar);11
tB月份formatter.format("%tB", calendar);November
tb月份缩写formatter.format("%tb", calendar);Nov
td日(2位)formatter.format("%td", calendar);20
teformatter.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
tSformatter.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
tFYYYY-MM-DDformatter.format("%tF", calendar);2017-11-20
tDMM/DD/YYformatter.format("%tD", calendar);11/20/17
tRHH:MM(24小时制)formatter.format("%tR", calendar);18:11
tTHH:MM:SS(24小时制)formatter.format("%tT", calendar);18:11:27
trHH:MM:SS 上午/下午formatter.format("%tr", calendar);06:11:27 pm
tc星期 月 日 HH:MM:SS YYYYformatter.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用法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:书香水墨 设计师:CSDN官方博客 返回首页
评论 1
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值