string.format() 本质是按 printf 风格模板插入参数,占位符以%开头接转换符(如%s、%d、%f),支持宽度对齐(%-10s)、精度控制(%.2f)、千分位(%,d)、位置索引(%1$s)等;需注意类型匹配、参数数量及 locale 影响。

Java 中用 String.format() 填充占位符,本质是按格式模板插入参数,类似 printf 风格。
基本语法和占位符写法
调用方式是 String.format(格式字符串, 参数...)。占位符以 % 开头,后接转换符(如 s 表示字符串、d 表示整数、f 表示浮点数)。
-
%s:适配任意对象,自动调用toString() -
%d:只接受整型数字(int、long等) -
%f:用于浮点数,可加精度控制,如%.2f保留两位小数 -
%n:平台无关的换行符(推荐替代\n)
带修饰符的常用格式化
可以在 % 和转换符之间添加宽度、对齐、精度等修饰符。
-
%10s:字符串右对齐,总宽至少 10 字符,不足补空格 -
%-10s:左对齐,同上 -
%05d:整数至少 5 位,不足前面补 0 -
%.3f:浮点数保留 3 位小数(四舍五入) -
%,d:添加千位分隔符,如1234567→1,234,567
位置索引与重复引用
用 %1$s、%2$d 这类带序号的占位符,可指定第几个参数,并支持多次引用同一参数。
String.format("姓名:%1$s,年龄:%2$d,再次提到姓名:%1$s", "张三", 25)- 序号从 1 开始,不是 0;
$后必须跟转换符 - 避免因参数顺序变动导致错位,适合复杂或动态模板
注意事项和常见坑
实际使用中容易出错的地方集中在类型匹配和异常处理。
- 传入类型与转换符不匹配会抛
IllegalFormatConversionException(比如用%d接字符串) - 参数数量少于占位符个数,抛
MissingFormatArgumentException - 中文环境注意 locale,默认可能影响小数点/千分位符号;必要时显式传入
Locale.US - 如果只是简单拼接,优先考虑
String.join()或文本块 +STR模板(Java 15+ 预览特性),更安全简洁
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











