前言
大家对String.format(String fmt, Object... args)
这个方法一定不是很陌生,在基本的字符串格式化输出时,他的功能可不小,可如果只知道String.formart("Hello, '%s","world")
这种最简单的用法,那就太小看这个工具了。从String.formart
的源码可以看到,实际上是创建了一个java.util.Formater
类,然后对字符串进行格式化处理
import java.util.Formatter;
public static String format(String format, Object... args) {
return new Formatter().format(format, args).toString();
}
语法介绍
完整语法
%[argument_index$][flags][width][.precision]conversion
argument_index$
可选, 参数索引是十进制整数,表示参数列表中参数的位置flags
可选, 标志是一组修改输出格式的字符。 有效标志集取决于转换width
可选, 宽度是正十进制整数,表示要写入输出的最小字符数.precision
可选, 精度是一个非负十进制整数,通常用于限制字符数conversion
必须, 转换符是一个字符,指示如何格式化参数。 给定参数的有效转换集取决于参数的数据类型
conversion 转换符
转换符 | 说明 | 示例 |
---|---|---|
s | 字符串 | (“Hello, %s”, “World”) = “Hello, World”; (“Hello, %s”, null) = “Hello, null” |
S | 大写字符串 | (“Hello, %S”, “World”) = “Hello, WORLD”; (“hello, %S”, null) = “Hello, NULL” |
c | 字符 | (“p%cssword”, ‘@’) = “p@ssword” |
C | 大写字符 | (“p%Cssword”, ‘a’) = “pAssword” |
b | 布尔 | (“%b”, null) = “false”; (“%b”, true) = “true”; (“%b”, new Object()) = “true”; |
B | 大写布尔 | (“%B”, null) = “FALSE”; (“%B”, true) = “TRUE”; (“%B”, new Object()) = “TRUE”; |
d | 整数(十进制) | ("%d, 99) = “99” |
x | 整数(十六进制) | (“%x”, 10) = “a” |
X | 整数(十六进制大写) | (“%X”, 10) = “A” |
o | 整数(八进制) | 77 |
f | 浮点类型 | 99.99 |
a | 十六进制浮点 | FF.25AE |
e | 指数 | 9.38e+5 |
g | 通用浮点 | |
h | 散列码 | |
% | 百分比(转义用) | (“%d%%”, 10) = “10%” |
n | 换行符 | (“Hello%n%s”, “World”) = Hello World |
conversion 转换符 (日期时间)
转换符 | 说明 | 示例 |
---|---|---|
tA | 星期名称 | (“%tA”, new Date()) = “” |
ta | 星期简称 | (“%ta”, new Date()) = “” |
tB | 月份名称 | (“%tB”, new Date()) = “” |
tb | 月份简称 | (“%tb”, new Date()) = “” |
tC | 年/100 | (“%tC”, new Date()) = “” |
tc | 包括全部日期和时间 | (“%tc”, new Date()) = “周五 8月 16 15:27:28 CST 2024” |
tD | yyyy/MM/dd | (“%tD”, new Date()) = “2024/08/16” |
td | 天(01-31) | (“%td”, new Date()) = “” |
te | 天(1-31) | (“%te”, new Date()) = “” |
tF | yyyy-MM-dd | (“%tF”, new Date()) = “2024-08-16” |
tH | 2位小时(24时, 补0) | |
th | 月份简称, 同tb | |
tj | 天(001-366) | |
tk | 小时(0-23) | |
tL | 毫秒(000-999) | (“%tL”, new Date()) = “741” |
tI | 小时(1-12) | |
tM | 分钟(00-59) | |
tm | 月份(01-13) | |
tN | 毫秒(000000000-999999999) | (“%tN”, new Date()) = “741000000” |
tp | 小写字母的上午或下午 | (“%tp”, new Date()) = “下午” |
tQ | 时间戳(毫秒) | (“%tQ”, new Date()) = “1723794743628” |
tR | HH:MM(24时) | (“%tR”, new Date()) = “15:55” |
tr | HH:mm:ss PM (12时) | |
tS | 秒(00-60) | |
ts | 时间戳(秒) | (“%ts”, new Date()) = “1723794784” |
tT | HH:mm:ss (24时) | |
tY | 年(4位) | (“%tY”, new Date()) = “” |
ty | 年(2位) | (“%ty”, new Date()) = “” |
tZ | 时区缩写 | (“%tZ”, new Date()) = “CST” |
tz | 相对GMT时区的偏移量 | (“%tz”, new Date()) = “+0800” |
argument_index 参数索引
标志 | 说明 | 示例 |
---|---|---|
1$, 2$, 3$ | 第 1, 2, 3个参数 | (“%s %s %s”, “a”, “b”, “c”) = “a b c”; (“%3$s %2$s %1$s”, “a”, “b”, “c”) = “c b a”; |
<$ | 对前一个参数的引用 | (“%2$s %s %<s %s”, “a”, “b”, “c”, “d”) = “b a a b” |
flags & width 标志 & 宽度
标志&宽度 | 说明 | 示例 |
---|---|---|
<width> | 使用空格补足位数(左边补齐) | (“%5s”, “0”) = " 0" |
-<width> | 使用空格补足位数(右边补齐) | (“%-5s”, “0”) = "0 " |
0<width> | 数字前补0 | (“%04d”, 99) = “0099” |
+ | 为正数或负数添加符号 | (“%+d”, 15) = “+15”; (“%+d”, -15) = “-15”; |
, | 数字用逗号隔开 | (“%,d”, 1234567) = “1,234,567” |
( | 负号用括号包裹 | (“%(d”, 123) = “123”; (“%(d”, -123) = “(123)”; |
# | 8进制或16进制的表现形式 | (“%o”, 8) = “10”; (“%#o”, 8) = “010”; (“%x”, 10) = “a”; (“%#x”, 10) = “0xa”; |
precision 精度
精度 | 说明 | 示例 |
---|---|---|
.<precision> | 对浮点数进行四十五入保留指定位数 | (“%.4f”, 12.345) = “12.3450”; (“%.2f”, 12.345) = “12.35”; (“%.1f”, 12.345) = “12.3”; (“%.0f”, 12.345) = “12” |