谈谈对字符串进行格式化--String.formart篇

前言

大家对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”
tDyyyy/MM/dd(“%tD”, new Date()) = “2024/08/16”
td天(01-31)(“%td”, new Date()) = “”
te天(1-31)(“%te”, new Date()) = “”
tFyyyy-MM-dd(“%tF”, new Date()) = “2024-08-16”
tH2位小时(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”
tRHH:MM(24时)(“%tR”, new Date()) = “15:55”
trHH:mm:ss PM (12时)
tS秒(00-60)
ts时间戳(秒)(“%ts”, new Date()) = “1723794784”
tTHH: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”
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值