你是否也曾苦恼于不知道怎么理解Java的字符串格式文档?这是一个难点,而本指南简化了Java中字符串格式化的使用,并加深大家的理解。
字符串格式化
在Java中格式化字符串的最常见方法是使用String.format()
方法。如果有“java sprintf”,那就是它了。
String output = String.format("%s = %d", "joe", 35);
对于格式化的控制台输出,可以使用printf()
或System.out
和System.err PrintStreams
中的format()
方法。
System.out.printf("My name is: %s%n", "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());
// 你可以在此处继续将数据附加到sbuf.
格式化转换符
下面是一份关于所有支持字符串格式化转换符的参考说明:
| 转换符 | 适用于 | 输出 |
|---|---|---|
| %a | 浮点数(BigDecimal除外) | 浮点数的十六进制输出 |
| %b | 任意类型 | 非null为“true”,null为“false” |
| %c | 字符 | Unicode字符 |
| %d | 整型 (incl. byte, short, int, long, bigint) | 十进制整型 |
| %e | 浮点 | 科学计数法中十进制数 |
| %f | 浮点 | 十进制数 |
| %g | 浮点 | 十进制数,可能以科学计数法表示,具体取决于精度和值 |
| %h | 任意类型 | 来自hashCode()方法的十六进制值字符串。 |
| %n | none | 平台特定的行分隔符。 |
| %o | 整型 (incl. byte, short, int, long, bigint) | 八进制数 |
| %s | 任意类型 | 字符串值 |
| %t | Date/Time (incl. long, Calendar, Date and TemporalAccessor) | %t是Date/Time转换的前缀。此后需要更多的格式化标志。参见下面的 Date/Time转换。 |
| %x | 整型 (incl. byte, short, int, long, bigint) | 十六进制字符串。 |
日期和时间格式
注意:用%T
替换下表中的格式字符%t
会使输出大写。
| 标记 | 说明 |
|---|---|
| %tA | 星期几的全拼,e.g. “Sunday“, “Monday“ |
| %ta | 星期几的缩写,e.g. “Sun“, “Mon“, etc. |
| %tB | 月份的全拼,e.g. “January“, “February“, etc. |
| %tb | 月份的缩写,e.g. “Jan“, “Feb“, etc. |
| %tC | 年份的世纪部分,以两位数字格式表示,e.g. “00” through “99”. |
| %tc | 用“%ta %tb %td %tT %tZ %tY”格式表示日期和时间,e.g. “Fri Feb 17 07:45:42 PST 2017“ |
| %tD | 日期格式为“%tm/%td/%ty“ |
| %td | 用两位数字表示每月的日期。e.g. “01” to “31“. |
| %te | 月份中的日期,不带前导0。e.g. “1” to “31”. |
| %tF | ISO 8601 格式化日期 “%tY-%tm-%td“. |
| %tH | 24小时制的小时,e.g. “00” to “23“. |
| %th | 与%tb相同. |
| %tI | 12小时制的小时 e.g. “01” – “12“. |
| %tj | 一年中的日期,带前导0,e.g. “001” to “366“. |
| %tk | 24小时制的小时,不带前导0,e.g. “0” to “23“. |
| %tl | 12小时制的小时,不带前导0,e.g. “1” to “12“. |
| %tM | 分钟格式,带前导0,e.g. “00” to “59“. |
| %tm | 月份格式,带前导0,e.g. “01” to “12“. |
| %tN | 9位数格式的纳秒,前导 0,e.g. “000000000” to “999999999”. |
| %tp | 特定于地区的 “am”或“pm” 标记. |
| %tQ | 自Jan 1 , 1970 00:00:00 UTC以来的毫秒. |
| %tR | 24小时时间格式,e.g. “%tH:%tM“. |
| %tr | 12小时时间格式,e.g. “%tI:%tM:%tS %Tp“. |
| %tS | 分钟内两位数格式的秒,e.g. “00” to “60”. “60”用于闰秒. |
| %ts | 自Jan 1, 1970 00:00:00 UTC以来的秒. |
| %tT | 24小时时间格式,e.g. “%tH:%tM:%tS“. |
| %tY | 4位数的年份格式,e.g. “0000” to “9999“. |
| %ty | 2位数的年份格式,e.g. “00” to “99“. |
| %tZ | 时区缩写. e.g. “UTC“, “PST“, etc. |
| %tz | 与GMT的时差,e.g. “-0800“. |
参数索引
参数索引被指定为在%
之后以$
结尾的数字,并在参数列表中选择指定的参数。
String.format("%2$s", 32, "Hello"); // prints: "Hello"
格式化整数
通过%d
转换说明符,你可以使用所有整数类型的参数,包括byte
,short
,int
,long
和BigInteger
。
默认格式:
String.format("%d", 93); // prints 93
指定宽度:
String.format("|%20d|", 93); // prints: | 93|
在指定宽度内左对齐:
String.format("|%-20d|", 93); // prints: |93 |
用零填充:
String.format("|%020d|", 93); // prints: |00000000000000000093|
输出带有“+
”的正数(负数始终有“-
”):
String.format("|%+20d|', 93); // prints: | +93|
正数前的空格。
正常情况下,负数包含“-”。
String.format("|% d|", 93); // prints: | 93| String.format("|% d|", -36); // prints: |-36|
使用特定于语言环境的千位分隔符。在美国的语言环境中,是“,
”:
String.format("|%,d|", 10000000); // prints: |10,000,000|
将负数括在括号(“()
”)内,然后跳过“-
”:
String.format("|%(d|", -36); // prints: |(36)|
八进制输出:
String.format("|%o|"), 93); // prints: 135
十六进制输出:
String.format("|%x|", 93); // prints: 5d
八进制和十六进制输出的其他表示形式。输出“0”开头的八进制数和“0x”开头的十六进制数。
String.format("|%#o|", 93);
// prints: 0135
String.format("|%#x|", 93);
// prints: 0x5d
String.format("|%#X|", 93);
// prints: 0X5D
字符串和字符转换
默认格式
打印整个字符串:
String.format("|%s|", "Hello World"); // prints: "Hello World"
指定字段长度:
String.format("|%30s|", "Hello World"); // prints: | Hello World|
左对齐文本:
String.format("|%-30s|", "Hello World"); // prints: |Hello World |
指定最大字符数:
String.format("|%.5s|", "Hello World"); // prints: |Hello|
字段宽度和最大字符数:
String.format("|%30.5s|", "Hello World"); | Hello|
总结
本指南介绍了Java中的字符串格式。涵盖了支持的格式转换符。数字格式和字符串格式都支持多种标志来表示其他格式。感谢大家的阅读。
(文本完,感谢阅读)

每日分享Java技术干货,欢迎关注!
点赞和在看就是最大的支持❤️
文章转载自前端新世界,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




