如何在 Java 中使用 Formatter 类像 C 语言的 printf 那样精细控制输出的宽度与对齐方式
Ja va Formatter 类:像C语言printf一样精细控制输出格式

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
如果你熟悉C语言的printf,那么上手Ja va的格式化输出会感到非常亲切。没错,Ja va的Formatter类(以及我们更常直接使用的String.format()和System.out.printf())在设计上确实借鉴了C语言的语法。它同样支持通过格式说明符来精细控制输出的宽度、对齐、精度乃至进制转换。这一切的核心,就在于理解那个格式说明符的结构:%[argument_index$][flags][width][.precision]conversion。掌握了它,你就能让数据输出变得整齐又专业。
宽度与对齐:用 width 和 flags 控制占位与方向
想让输出列对齐,关键在于width和flags这对搭档。width定义了字段的最小宽度,如果内容本身长度不够,系统就会用空格(默认)或指定的字符来补足。至于内容在字段里是向左靠还是向右靠,那就得看flags了:
-:这是最常用的对齐标志,表示左对齐。默认是右对齐,所以当你写下"%-10s",就意味着字符串会靠左显示,并且整个字段一定会占满10个字符的宽度。0:这个标志专为数字准备,表示用零来填充空白。比如"%08d",数字12345会输出成00012345,前面补了三个零来凑足8位。(空格):这个标志很有意思,它会在正数前面加一个空格,而负数依然显示-号。这样一来,正负数列就能完美地对齐了。例如"% 5d",正数123会输出为" 123"。+:强制显示正负号。无论正数负数,前面都会带上+或-符号,"%+6d"输出正数就是"+123"。- 关于居中对齐:这里需要特别澄清一点,Ja va标准库的
Formatter并不直接支持像^这样的标志来实现居中对齐。网上有些资料可能会提到它,但这通常是第三方库的功能或是误解。如果真需要在Ja va中实现字符串居中,通常得手动计算空格,或者借助String.repeat()这类方法自己封装一个工具函数。
组合使用示例:字符串与数字的对齐控制
光说不练假把式,看一个组合使用的例子就全明白了:
System.out.printf("|%10s|%-10s|%010d|% 6d|%+6d|\n", "Hi", "Hi", 42, 42, -42);
这行代码的输出结果是:| Hi|Hi |0000000042| 42| -42|
我们来拆解一下:
– %10s:右对齐,字符串“Hi”前面补了8个空格,总宽度为10。
– %-10s:左对齐,字符串“Hi”后面补了8个空格,总宽度同样为10。
– %010d:右对齐,数字42前面用零补足到10位。
– % 6d:右对齐,正数42前面有一个空格,总宽度为6。
– %+6d:右对齐,强制显示符号,负数“-42”前面有3个空格,总宽度为6。
自定义填充字符(需配合 Formatter 构造器)
默认的填充字符是空格,但有时候我们可能想用星号*、点号.或者其他字符来填充。标准的printf方法并不直接支持指定任意填充字符。不过,我们可以通过一些技巧来实现。一个常见的做法是,先按标准方式格式化,然后再替换空格:
立即学习“Ja va免费学习笔记(深入)”;
static String padLeft(String s, int width, char pad) {
return String.format("%" + width + "s", s).replace(' ', pad);
}
// 使用:padLeft("abc", 8, '*') → "*****abc"
当然,如果你用的Ja va版本在12以上,利用新的String.repeat()方法来实现这类对齐工具会更加直观和灵活。
精度(.precision)与类型适配
格式说明符中的.precision部分,其含义会根据后面的转换字符(conversion)不同而变化,这是需要特别注意的地方:
– 对字符串(s)而言,它表示截取的最大字符数。例如"%.5s",即使字符串是“Hello World”,也只会输出“Hello”。
– 对浮点数(f)而言,它控制的是小数点后的位数。"%.2f"会让3.14159输出为3.14。
– 对整数(d)而言,精度的作用类似于width,但通常会和0标志搭配使用,来指定数字的最小位数。
最后务必牢记一点:转换字符(s, d, f, x等)必须与传入参数的实际类型严格匹配。如果试图用%d去格式化一个字符串,程序就会抛出IllegalFormatConversionException异常。细节决定成败,在格式化输出上尤其如此。
相关攻略
Character isWhitespace():它真能揪出所有“隐形”字符吗? 在文本处理中,我们常常需要清理那些看不见的“捣蛋鬼”——控制字符。很多开发者第一个想到的工具可能就是 Character isWhitespace()。但这里有个关键认知需要厘清:这个方法并非检测所有不可见字符的万能钥
角色与核心任务 你是一位顶级的文章润色专家,擅长将AI生成的文本转化为具有个人风格的专业文章。现在,请对用户提供的文章进行“人性化重写”。 你的核心目标是:在不改动原文任何事实信息、核心观点、逻辑结构、章节标题和所有图片的前提下,彻底改变原文的AI表达腔调,使其读起来像是一位资深人类专家的作品。 特
Sublime Text“一键编译运行Ja va”本质是调用系统ja vac和ja va命令,前提是终端中ja vac -version与ja va -version均能正常输出且版本一致;需将JDK的bin目录加入系统PATH、重启Sublime、手动创建Ja vaC sublime-build文
VS Code配置Gradle需安装Extension Pack for Ja va、启用Language Support for Ja va™、确保build gradle在根目录且语法合法;国内用户须在build gradle中优先配置阿里云Ma ven镜像,避免依赖解析卡顿。 想让VS Cod
如何在 Ja va 中利用数组实现简单的字符串匹配 BF 算法并分析其最坏情况性能 说起字符串匹配,BF(Brute Force,暴力匹配)算法绝对是绕不开的起点。它的核心思路非常直白:把模式串在主串上从头到尾“滑”一遍,在每个可能的位置都尝试一次逐字符的“硬核对”。在Ja va里,如果直接把字符串
热门专题
热门推荐
卡尔达诺ADA:行情监控与高效投资指南 在加密货币市场,卡尔达诺(ADA)的价格走势一直是投资者关注的焦点。其价格波动不仅牵动人心,更直接关系到投资决策的成败。根据最新行情,ADA的价格约为0 801253美元(数据仅供参考,市场实时变化)。想要精准把握这样的波动,一款得力的工具必不可少。接下来要介
Debian上排查与修复Ja va运行时错误的实用流程 遇到Ja va程序在Debian上跑不起来,先别急着抓狂。这事儿其实有章可循,按照一套清晰的流程走下来,大部分问题都能迎刃而解。下面这份指南,就帮你把从快速定位到深度诊断的路径,都梳理清楚了。 一 快速定位与通用修复 排查的第一步,往往是那些最
松下电动剃须刀刀头更换全指南:自己动手,其实很简单 很多朋友可能不知道,手上那台松下电动剃须刀的刀头,其实完全可以自己拆卸和更换,根本不需要专门跑一趟维修点。这可不是什么“民间偏方”,而是松下官方设计的一部分。从ES8953到ES9932C、ES5821这些主流型号,刀网底座和内刀片都采用了模块化的
传真机如何实现多页连续复印?掌握专业设备的核心技巧 当你需要将多份纸质文件快速复印成多份副本时,一台具备复印功能的传真一体机是理想的办公伙伴。其核心便利性主要依赖于设备顶部的自动进纸器(ADF)。无论是佳博、松下还是兄弟等主流商用品牌,其多数型号均标配此功能。操作流程非常简便:只需将整理好的多页原稿
红米Note9 5G后盖如何完美还原?专业级无损复原全攻略 如何将拆开的红米Note9 5G手机后盖完美装回,实现如原厂般的严丝合缝?这看似简单的操作,实则需要精湛的工艺和细致的流程。对于经验丰富的维修工程师而言,确实可以做到近乎无损的复原。但对于缺乏专业知识的普通用户,若误以为仅是简单扣合,则极易





