string.format() 是 java 中最常用、最轻量的字符串格式化方式,语法简洁、类型安全、无需额外依赖,通过占位符解析并填充对应值,支持参数索引、对齐补零、千分位等修饰,但需注意 null 处理与性能开销。

Java 中 String.format() 是最常用、最轻量的字符串格式化方式,语法简洁、类型安全、无需引入额外依赖。它不是简单拼接,而是按规则解析占位符并填充对应值,类似 C 的 printf,但更严格、更可控。
基础写法:占位符 + 参数顺序匹配
最常用形式是 String.format("模板 %s %d %f", str, num, value),要求参数顺序与占位符一一对应:
-
%s→ 接收任意对象(null会转成字符串"null",不是空串) -
%d→ 只接受整数类型(int、long、short、byte、BigInteger),不接受float或Double -
%f→ 接收浮点数(float、double),%.2f表示保留两位小数(自动四舍五入) -
%%→ 输出一个真正的百分号%;%n→ 输出平台无关换行符(推荐代替\n)
安全写法:显式指定参数索引
避免因参数顺序错乱导致运行时报错(如 IllegalFormatConversionException),建议用 %1$s、%2$d 明确绑定:
-
%1$s表示“取第一个参数,按字符串格式化” -
%2$d表示“取第二个参数,按十进制整数格式化” - 同一个参数可复用,例如
String.format("你好 %1$s,欢迎回来 %1$s", name)
常用格式修饰:对齐、补零、千分位
在转换符前加修饰符,控制输出样式:
-
%5s→ 字符串最小宽度为 5,右对齐;%-5s→ 左对齐 -
%08d→ 整数至少 8 位,不足左边补 0(如42→00000042) -
%,d→ 千分位分隔(如1000000→1,000,000) -
%(d→ 负数用括号包裹(如-123→(123))
处理 null 和边界情况
String.format() 不会因 null 抛出空指针异常,但会把 null 当作字符串 "null" 输出——这容易引发隐藏 bug:
- 日志中出现
"用户 null 年龄 25"很难排查 - 建议提前兜底:用
Objects.toString(obj, "")或三元表达式(obj == null ? "" : obj) - 避免在高频循环中反复调用
format(),它内部有正则解析开销,大量使用时可考虑StringBuilder或MessageFormat
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











