string.format() 是 java 中安全、清晰的字符串格式化方法,支持模板占位符(如%s、%d、%.2f)、对齐控制(%-10s、%08d)、参数复用(%1$d)及千分位(%,d)、括号负数(%,(d)、进制转换(%x)等高级功能。

String.format() 是 Java 中最常用、最清晰的字符串组合方式,它用模板加参数的方式替代 + 拼接,既安全又易读,还能精准控制数字、日期、对齐等格式。
基本用法:模板 + 参数顺序匹配
模板里用 % 开头的占位符表示插入位置,参数按顺序填入:
String name = "李四";
int age = 32;
double salary = 8500.67;
String info = String.format("姓名:%s,年龄:%d,月薪:%.2f元", name, age, salary);
// 输出:姓名:李四,年龄:32,月薪:8500.67元
-
%s→ 字符串(任何对象都会调用toString()) -
%d→ 十进制整数(支持byte/short/int/long) -
%.2f→ 浮点数,保留两位小数(.2是精度,f是转换符)
注意:参数类型必须和占位符匹配,否则运行时报 `IllegalFormatConversionException`。
控制宽度与对齐:让输出更整齐
适合生成表格、日志、对齐报表等场景:
-
%10s→ 字符串至少占 10 个字符,右对齐(左边补空格) -
%-10s→ 左对齐(右边补空格) -
%08d→ 整数至少 8 位,不足时左边补0 -
%15.3f→ 浮点数总宽至少 15 字符,小数部分 3 位
String line = String.format("|%-10s|%05d|%.2f|", "张三", 42, 9999.9);
// 输出:|张三 |00042|9999.90|
宽度只设最小长度,超长内容不会被截断;精度对字符串有效(如 `%.5s` 只取前 5 个字符),对整数无效。
复用参数或乱序引用:用索引提升灵活性
在模板中用 %n$ 显式指定第 n 个参数(从 1 开始编号),可重复使用、跳过或打乱顺序:
int code = 200;
String msg = "OK";
// 同一个参数用两次
String log = String.format("状态码:%1$d,含义:%2$s,再次确认:%1$d", code, msg);
// 输出:状态码:200,含义:OK,再次确认:200
// 调换顺序,不依赖传参位置
String desc = String.format("说明:%2$s,编号:%1$d", 1001, "订单创建成功");
// 输出:说明:订单创建成功,编号:1001
这种写法特别适合模板固定、参数来源多变的场景(比如国际化提示、SQL 拼装)。
处理数字千分位、负数括号、进制等实用技巧
-
%,d→ 自动添加千分位分隔符(如1234567→1,234,567) -
%,(d→ 负数用括号表示,正数不带符号(如-1000→(1,000)) -
%x/%X→ 小写/大写十六进制(255→ff或FF) -
%o→ 八进制,%h→ 对象哈希值(十六进制)
int amount = -1234567;
String display = String.format("金额:%,(,d 元(十六进制:%x)", amount, amount);
// 输出:金额:(1,234,567) 元(十六进制:-12d687)
千分位和括号标志需搭配 `,` 和 `(` 使用,且仅对数字类转换符(`d`/`f`/`e` 等)生效。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











