String-format的奇怪用法

关于%ns(n为数字)的用法

    先来看以下代码

String.format("A=%1s,B=%2s,C=%3s,D=%2s,E=%2s,F=%4s","A","B","C","DD","EEE","FFF");

    对于上述代码,如果我们打印出来这个拼后的字符串,那么会看到如下格式的字符串。

A=A,B= B,C=  C,D=DD,E=EEE,F= FFF

    我们惊奇的发现,里边有的地方有空格,有的地方却没有空格,那么这是为什么呢?
    首先对于format,定义是为了规范格式化字符串,把字符串按照一定的格式拼接完成,拼接就是将多个字符串按照顺序放在一起,但是format没有那么简单,它还可以规范拼接后的字符串的对齐方式。

    format默认使用的对齐方式是右对齐,默认空位补空格。

    %2s里的那个数字2代表的就是当前字符串最小长度,如果当前位置字符串长度小于2那么会对应补齐空格,如果长度超出或者正好相等,那么便不会自动补空格。所以上边对于B=%2s,拼接的字符串为"B",而当前位字符串最小长度要求为2,所以B前边会补一个空格,结果为B=[空格]B。

  • 修改对齐方式 ‘’-”

    format的默认对齐方式是右对齐,我们可以使用- 来修改其对齐方式为左对齐,这样他会在末尾补空格

String.format("A=%1s,B=%-2s,C=%3s,D=%2s,E=%2s,F=%4s","A","B","C","DD","EEE","FFF");

    结果:

A=A,B=B ,C=  C,D=DD,E=EEE,F= FFF

    可以看到B=%-2s对齐方式改为了左对齐

    我们现在一直试验的%ns,n为整数,有没有想过n为小数时候是什么现象呢?
看如下代码:

String.format("A=%1s,B=%-2s,C=%3.1s,D=%2s,E=%2s,F=%4s", "A", "B", "CCC", "DD", "EEE", "FFF")

    注意看C=%3.1s的表现,我们看结果:

A=A,B=B ,C=  C,D=DD,E=EEE,F= FFF

    我们会惊奇的发现虽然我们定义了CCC去替换C=%3.1s ,但是输出结果却依然是C=[空格][空格]C。这是因为当n出现小数时候,小数点后边的数字代码当前位字符串所允许的最大长度,超出了则会从左边第一位开始截取所允许的长度的字符串。

    format中除了%s还会有%d,%f。对于%d,只能中规中距的使用,否则会报异常。那么对于%f有什么奇妙的用法么?
看代码:

String.format("A=%1.2f,B=%2.1f,C=%3.5f,D=%3.1f", 2222.0444f, 2.0444f, 3.1f,0.1f)

    结果:

A=2222.04,B=2.0,C=3.10000,D=0.1

    会发现,对于%nf,n小数点后边代表的是所保留的最大位数。如果不够最大位数,那么会自动末尾补0,那么小数点前边的整数貌似看起来没起到什么作用。其实它也是有作用的,只不过不是用于String.format中,而是用于以下场景。

    我们可能会有需要将日志按照一定的格式输出到文件中,那么我们会定义一个formatter对象来格式化日志,这个时候,%nf,n的小数点前几位就有作用了。他会按照上下文打印的字符串,对应的在数据前边补齐空格。从而输出的文档中,数据是格式化好的。

    如何使用:

Formatter formatter = new Formatter(fileName);
formatter.format("----XXX日志----");
formatter.format("A=%1.2f,B=%2.1f,C=%3.5f,D=%3.1f", 2222.0444f, 2.0444f, 3.1f, 0.1f);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值