java字符串格式化


前言

你是否经常忘记Java String 格式说明符?或者你从来都没有时间学习过。以下是您可以使用的各种标识符参考。

你是否尝试阅读并理解java 的String 格式化文档?我觉得很难理解。尽管这个文档提供了所有的信息,但是它的组织结构让人失望。


一、String 格式化

在Java 中格式化字符串最常用的方法就是 String.format(),如果有一个Java 版本的printf,它会像下面这样:

String output = String.format("%s = %d", "joe", 35);

System.out.println(output);//输出joe = 35


对于控制台中的格式化输出,可以使用System.out 或System.err 中的 printf() 或者 format()方法。


System.out.printf("My name is: %s%n", "joe");//格式化输出:My name is: joe

创建一个Formatter 并将其链接到StringBuilder,通过format() 格式化输出的内容会追加到StringBuilder 中。

StringBuilder sbuf = new StringBuilder();
Formatter fmt = new Formatter(sbuf);
fmt.format("PI = %f%n", Math.PI);
System.out.print(sbuf.toString());


二、格式说明符

1.以下是所有支持的转换说明符的快速参考。

说明符适用于输出
%a浮点数 (除了BigDecimal)浮点数的十六进制输出
%b任何类型如果为非空则为“true”,为空则为“false”
%c字符Unicode字符
%d证书(包括byte, short, int, long, bigint)十进制整数
%e浮点数科学计数的十进制数
%f浮点数十进制数
%g浮点数十进制数,根据值和精度可能以科学计数法显示
%h任何类型通过hashCode()方法输出的16进制数
%n平台相关的换行符
%o整数(包括byte, short, int, long, bigint)八进制数
%s任何类型字符串
%t日期/时间 (包含long, Calendar, Date 和TemporalAccessor)%t是日期/时间转换的前缀。后面还需要跟其他的标识,请参考下面的日期/时间转换。
%x整数(包含byte, short, int, long, bigint)十六进制字符串

日期和时间格式

注意:使用 “%T” 替换下面的 “%t” 可以将输出结果变成大写形式。

标识注释
%tA星期几的全名,例如 “Sunday“, “Monday“。
%ta星期几的缩写,例如 “Sun“, “Mon“。
%tB月份的全名,例如 “January“, “February“。
%tb月份的缩写,例如 “Jan“, “Feb“。
%tC年的世纪部分的格式为两位数,从 “00“到“99”。
%tc日期和时间的格式为 “%ta %tb %td %tT %tZ %tY” 如 “Fri Feb 17 07:45:42 PST 2017“。
%tD格式为 “%tm/%td/%ty“ 的日期。
%td两位的日期格式,从 “01”到 “31“。
%te没有前导0的日期,从 “1” 到 “31”。
%tF使用 “%tY-%tm-%td“ 格式的 ISO 8601 日期。
%tH24小时制的小时,从 “00” 到 “23“。
%th同 %tb。
%tI12小时制的小时,从 “01” 到 “12“。
%tj带前导0的年中的日期,从 “001” 到“366“。
%tk没有前导0的24小时制,从 “0” 到 “23“。
%tl没有前导0的12小时制,从 “1” 到“12“。
%tM带前导0的分钟,从 “00” 到“59“。
%tm带前导0的月份,从 “01” 到 “12“。
%tN带前导0的9位纳秒数,从 “000000000” to “999999999”.
%tp和区域相关的 “am” or “pm” 标记。
%tQ1970年1月1日00:00:00 UTC 以来的毫秒。
%tR24小时制的时间,如:“%tH:%tM“。
%tr12小时制的时间,如:“%tI:%tM:%tS %Tp“。
%tS2位数字格式的秒,从 “00” 到 “60”。 “60” 需要支持闰秒。
%ts1970年1月1日00:00:00 UTC以后的秒数。
%tT24小时制的时分秒,如: “%tH:%tM:%tS“。
%tY4位的年份格式,从 “0000” 到 “9999“。
%ty2位的年份格式,从 “00” 到 “99“。
%tZ时区缩写,如:“UTC“, “PST“。
%tz与GMT的时区偏移量,如 -0800

2.参数索引

参数索引是以 $ 结尾,在 % 后面的数字,用于指定在参数列表中的参数。参数索引从1 开始。

String.format("%2$s", 32, "Hello"); // 输出:"Hello"

指定宽度:

String.format("|%20d|", 93); // 输出:|                  93|

指定宽度内的左对齐:

String.format("|%-20d|", 93); // 输出:|93                  |

用零填充:

String.format("|%020d|", 93); // 输出:|00000000000000000093|

用”+”号打印正数(负数总是包含”-“):

String.format("|%+20d|", 93);  // 输出:|                 +93|
String.format("|%+20d|", -93); // 输出:|                 -93|

正数之前的空格,按正常值计算负数的“-”。

String.format("|% d|", 93);  // 输出:| 93| 
String.format("|% d|", -36); // 输出:|-36|

使用和区域相关的千位分隔符,美国的是“,”:

String.format("|%,d|", 10000000); // 输出:|10,000,000|

中国的也一样:

String.format(Locale.CHINA, "|%,d|", 10000000)// 输出:|10,000,000|

使用左边括号括起来可以跳过“-”

String.format("|%(d|", -36); // 输出:|(36)|

八进制输出。

String.format("|%o|"), 93); // 输出:135

十六进制输出

String.format("|%x|", 93); // 输出:5d

八进制和十六进制输出的替代表示。

带前导0的八进制和带前导” 0x“的十六进制输出

String.format("|%#o|", 93); // 输出:0135
String.format("|%#x|", 93); // 输出:0x5d
String.format("|%#X|", 93); // 输出:0X5D


3.字符串和字符转换

代码如下(示例):
默认格式。

打印整个字符串。

String.format("|%s|", "Hello World"); // 输出:"Hello World"

指定字段长度。

String.format("|%20s|", "Hello World"); // 输出:|         Hello World|

左对齐文本。

String.format("|%-20s|", "Hello World"); // 输出:|Hello World         |


指定最大字符数

String.format("|%.5s|", "Hello World"); // 输出:|Hello|

指定宽度和最大字符数。

String.format("|%20.5s|", "Hello World"); // 输出:|               Hello|

3.日期格式化

所有日期,除了纯数字显示的内容和区域无关外,文字显示的都和区域相关(下面示例的区域为中国)。.

最简单的星期几。

String.format(Locale.US, "%tA", new Date()); // 输出:Sunday
String.format("%tA", new Date());            // 输出:星期日

“ %tc “相当于“ %ta %tb %td %tT %tZ %tY ”,而且不需要自己指定索引。

String.format("%tc", new Date()); // 输出:星期日 四月 16 08:21:59 CST 2017

如果想要通过具体标识手动指定成上面的效果,需要增加索引。

String.format("%1$ta %1$tb %1$td %1$tT %1$tZ %1$tY", new Date());
// 输出:星期日 四月 16 08:24:06 CST 2017

常见的“ yyyy-MM-dd HH:mm:ss” 格式。

String.format("%1$tY-%1$tm-%1$td %1$tT", new Date());
// 输出:2017-04-16 08:31:16


总结

以上就是今天要讲的内容,本篇教程解释了Java 中的String 格式化。我们涵盖了支持的格式说明符。数字和字符串格式都支持各种可代替的标识。

  • 13
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值