拼一条带变量的提示信息,用加号连出一长串,改一次眼晕一次。Java 的 string.format()用法其实很简单,占位符一放,格式立刻清楚。

最常用的几个占位符

String s = String.format(%s 得分 %d,正确率 %.1f%%,name, score, rate);

%s 接字符串,%d 接整数,%f 接浮点数,%.1f 表示保留一位小数,两个百分号连写表示输出一个百分号。参数按顺序往后填,类型必须对得上,否则运行时会抛 IllegalFormatConversionException。

按位置取参数

默认从左到右依次取值。想让同一个参数在多处复用,写成 %1$s 这种带序号的形式,数字是参数下标,从 1 开始。做多语言文案时特别有用,译文语序常常是反的,固定顺序就会错位。

几种实用的格式组合

  • 补零:%05d 表示五位,不足前面补 0,生成流水号常用。
  • 千分位:%,d 让整数按三位加逗号,金额展示更好读。
  • 宽度与对齐:%10s 右对齐占十位,%-10s 左对齐,排文本表格方便。
  • 本地化:把 Locale.CHINA 作为第一个参数,数字和日期按中文习惯走。

容易踩的坑

format 不会替你转类型。占位符比参数多会抛 MissingFormatArgumentException,参数多了则被忽略,不会报错,所以漏参数才是常见事故。要输出百分号必须写两个,写一个会被当成占位符开头。日期别手工拼,用 %tF、%tT 这类,或者直接交给 DateTimeFormatter。

和 StringBuilder 怎么选

日志、提示语这种定长模板,用 format 可读性最好。循环里拼接成千上万次,用 StringBuilder 更省,format 每次调用都会新建 Formatter,量大就有开销。

  • 判断提醒:面向人的提示和日志统一用 format,格式好维护;纯追求性能的热点循环里,别反复调用它。