java的printf支持通过字符串拼接将变量作为格式化宽度参数,从而实现动态控制数字前导空格数量,无需硬编码固定宽度值。
在Java中,System.out.printf() 的格式说明符(如 %10d)中的数字 10 表示最小字段宽度——即输出的整数至少占据10个字符宽,不足时自动在左侧补空格(右对齐)。但该宽度值通常写死在格式字符串中。好消息是:它完全可以动态化。
核心原理在于——printf 的第一个参数是一个普通 String,因此可利用字符串拼接(或 String.format 的等效方式)在运行时构造合法的格式串。只需将变量 width 插入到 “%” + width + “d” 中即可:
int width = 10;
int x = 123;
System.out.printf("%" + width + "d", x); // 输出:" 123"(共10字符,含7个前导空格)
再看一个宽度小于数值位数的例子:
int width = 3;
int x = 123;
System.out.printf("%" + width + "d", x); // 输出:"123"(无空格,因3位数已满足最小宽度3)
✅ 关键特性说明: