最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Java中 PrintWriter 的 format 如何实现类似于 printf 的格式化输出
时间:2026-07-26 17:52:53 编辑:袖梨 来源:一聚教程网
PrintWriter的format与printf本质相同,均底层调用java.util.Formatter,支持%s、%d、%.2f、%n等C风格格式符,需手动flush或启用autoFlush,推荐用%n替代n。
PrintWriter 的 format 方法和 printf 本质是同一个机制,它底层调用的是 java.util.Formatter,支持和 System.out.printf 完全相同的格式化语法。
format 方法的基本用法
PrintWriter 提供了两个重载的 format 方法:
-
format(String format, Object... args):使用默认的本地化设置(通常是系统 locale) -
format(Locale l, String format, Object... args):显式指定 locale,避免因地区差异导致小数点、千分位等格式出错
例如:
PrintWriter pw = new PrintWriter(System.out);pw.format("姓名:%s,年龄:%d,身高:%.2f 米%n", "张三", 25, 1.785);pw.flush(); // 别忘了刷新缓冲区
常用格式化转换符
和 C 的 printf 类似,Java 支持标准转换符,关键几个有:
立即学习“Java免费学习笔记(深入)”;
-
%s:任意对象,调用toString() -
%d:十进制整数(int、long 等) -
%f:浮点数,默认保留6位小数 -
%.2f:保留2位小数(精度控制) -
%n:平台无关的换行符(推荐替代n) -
%tY-%<em>tm-%</em>td:日期格式(%t后接时间字段标识,% 表示复用前一个参数)
注意 flush 和自动刷新
PrintWriter 默认不自动刷新,调用 format 后内容还在缓冲区中:
- 手动调用
pw.flush()强制输出 - 构造时传入
true开启自动刷新:new PrintWriter(System.out, true),这样每次format或println都会立即输出 - 注意:自动刷新只对
println、printf、format和write(带换行的重载)生效,普通write(String)不触发
与 String.format 的区别
String.format(...) 返回格式化后的字符串,不输出;而 PrintWriter.format(...) 直接写入流。两者语法一致,可互换验证:
- 先用
String.format调试格式串是否正确 - 再把相同格式串和参数传给
pw.format - 比如:
String s = String.format("%.2f", 3.14159); // → "3.14"