当前位置:

首页 > 编程开发 > 如何在 Java 中使用 Formatter 类像 C 语言的 printf 那样精细控制输出的宽度与对齐方式

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

Ja va Formatter 类:像C语言printf一样精细控制输出格式 如果你熟悉C语言的printf,那么上手Ja va的格式化输出会感到非常亲切。没错,Ja va的Formatter类(以及我们更常直接使用的String.format()和System.out.printf())在设计上确

Ja va 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异常。细节决定成败,在格式化输出上尤其如此。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
作者最新文章
编程开发 Java
相关文章 更多
大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景
大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景

针对大数据工程场景,系统对比Java、Scala与Python在执行性能、生态结合、开发效率和维护成本上的核心差异,给出清晰的架构选型依据与落地方案。

Java抽象方法修饰符限制:为何不能用private或static
Java抽象方法修饰符限制:为何不能用private或static

深入剖析Java中抽象方法为何严禁使用private和static修饰符。从面向对象契约规范、方法继承重写、JVM动态绑定(invokevirtual)与静态解析(invokestatic)等底层机制展开详细推导,结合编译报错示例与全景对比,彻底理清修饰符限制背后的设计逻辑。

Java变量声明与初始化:局部、成员及静态变量的定义语法
Java变量声明与初始化:局部、成员及静态变量的定义语法

系统解析Java局部变量、成员变量与静态变量的定义语法、声明与初始化机制、生命周期及JVM内存驻留规则,结合图解与代码示例分析常见编译错误与认知误区。

Java子类未实现抽象方法编译错误修复指南
Java子类未实现抽象方法编译错误修复指南

针对Java开发中常见的“子类未实现抽象方法”编译错误,深入分析报错原因,提供重写实现、声明抽象子类两种标准修复路径,并总结参数签名、访问修饰符等典型避坑要点。

junit怎么用零基础完成第一个单元测试教程
junit怎么用零基础完成第一个单元测试教程

适合初学者的JUnit入门指南,详解如何配置环境、编写首个测试用例、使用断言验证结果,并分析单元测试的适用场景与例外情况。

Java发送post请求发送json数据的实现方法与代码示例
Java发送post请求发送json数据的实现方法与代码示例

深入解析Java发送JSON格式POST请求的实现机制,对比原生API与第三方库的代码差异,提供可复制的代码示例,并探讨超时设置、编码处理及微服务场景下的例外情况。

百度官网入口最新版 百度搜索网页版直达
百度官网入口最新版 百度搜索网页版直达

百度官方在线入口最新版网页版直达官网是https://www.baidu.com/,界面简洁无干扰、多端同步体验一致、内容聚合维度丰富、语音与图像识别稳定、隐私控制机制可见。

谷歌浏览器Mac版入口
谷歌浏览器Mac版入口

谷歌浏览器Mac版官方安装指南 谷歌浏览器Mac版官方安装入口是https://www.google.com/chrome/,需macOS 12+系统、500MB空间,下载.dmg后拖入应用程序安装,支持多设备同步、性能优化与隐私保护功能。 苹果电脑Chrome的安装入口究竟在哪里?这个问题最近可是

Chrome浏览器JS脚本不运行怎么办
Chrome浏览器JS脚本不运行怎么办

Chrome中JavaScript未执行需依次检查:一、移除站点级禁用并添加允许域名;二、开启全局JavaScript开关;三、禁用干扰扩展;四、在开发者工具中启用JavaScript;五、重置内容设置为默认。 有时在Chrome里打开网页,会发现交互按钮点了没反应,数据加载不出来,页面仿佛“静止”

IE浏览器怀旧版在线网址
IE浏览器怀旧版在线网址

IE浏览器怀旧版在线网址:一次精准的技术时光回溯 最近,不少老用户和怀旧爱好者在反复搜索一个问题:那个经典的Internet Explorer,如今还能在哪里原汁原味地体验到?答案指向一个特定的地址:https://ie.microsoft.com/legacy/。 这个网站远不止是一个简单的“皮肤

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

PDF教程
PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

Mac软件 更多
AirBuddy 3 macOS版
AirBuddy 3 macOS版
macOS

AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

AirServer macOS版
AirServer macOS版
macOS

AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

AnyDesk macOS版
AnyDesk macOS版
macOS

AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

WINDOWS 更多
Fuzor Windows版
Fuzor Windows版
Windows

Fuzor Windows版是一套面向建筑、工程与施工团队的BIM/VDC平台,可汇集多来源模型和进度数据,完成实时可视化、4D施工推演、场地物流规划、问题检查、成果演示及团队协同。

Gety Windows版
Gety Windows版
Windows

Gety Windows版是一款本地AI文件搜索工具,可索引电脑中的文档和图片,通过全文搜索、语义检索与OCR快速定位内容,并提供原版式预览、筛选和AI工具连接功能。

iMazing Windows版
iMazing Windows版
Windows

iMazing Windows版是一款面向iPhone、iPad和iPod用户的本地设备管理工具,可在电脑上完成多版本备份、照片与音乐传输、信息导出、应用数据管理以及新旧设备迁移。