Java提供了多种数据格式化输出的方式,开发者可以根据不同的使用场景选择合适的方法,既可以输出到控制台,也可以生成格式化的字符串。这些方式的核心都是基于格式说明符来定义输出规则,下面逐一介绍具体的用法。

printf方法格式化输出到控制台
System.out.printf是Java中最常用的控制台格式化输出方法,它和C语言的printf用法类似,第一个参数是格式字符串,后面的参数是要替换的变量。格式字符串中可以包含普通文本和格式说明符,格式说明符以%开头,后面跟着格式字符来指定输出类型。
常用的格式说明符有:%d表示输出整数,%f表示输出浮点数,%s表示输出字符串,%c表示输出字符,%b表示输出布尔值,%n表示换行,和平台无关。
下面是一个简单的printf使用示例:
public class PrintfDemo {
public static void main(String[] args) {
int age = 25;
double height = 175.5;
String name = "张三";
// 格式化输出用户信息
System.out.printf("姓名:%s,年龄:%d,身高:%.1fcm%n", name, age, height);
// 输出整数,宽度为8,右对齐
System.out.printf("右对齐整数:%8d%n", 123);
// 输出整数,宽度为8,左对齐
System.out.printf("左对齐整数:%-8d结束%n", 123);
}
}
String类的format方法生成格式化字符串
如果需要生成格式化的字符串而不是直接输出到控制台,可以使用String类的静态方法format,它的参数和printf类似,返回的是格式化后的字符串,之后可以对该字符串进行后续处理,比如存储、传输等。
示例代码如下:
public class StringFormatDemo {
public static void main(String[] args) {
String product = "笔记本电脑";
double price = 4999.99;
int count = 3;
// 生成格式化订单信息字符串
String orderInfo = String.format("商品:%s,单价:%.2f元,数量:%d,总价:%.2f元",
product, price, count, price * count);
System.out.println(orderInfo);
// 日期格式化示例,%tY表示四位年份,%tm表示两位月份,%td表示两位日期
String dateStr = String.format("当前日期:%tY-%tm-%td",
new java.util.Date(), new java.util.Date(), new java.util.Date());
System.out.println(dateStr);
}
}
Formatter类的灵活格式化操作
Formatter类位于java.util包下,是Java格式化功能的核心类,printf和String.format本质上都是基于Formatter实现的。如果需要进行更复杂的格式化操作,比如输出到文件、指定字符编码等,可以直接使用Formatter类。
下面是Formatter的使用示例:
import java.util.Formatter;
public class FormatterDemo {
public static void main(String[] args) {
// 创建Formatter,输出到控制台
Formatter formatter = new Formatter(System.out);
String course = "Java编程";
double score = 92.5;
// 格式化输出成绩信息
formatter.format("课程:%s,成绩:%.1f分%n", course, score);
formatter.close();
// 创建Formatter,生成字符串
StringBuilder sb = new StringBuilder();
Formatter strFormatter = new Formatter(sb);
strFormatter.format("学生姓名:%s,学号:%d", "李四", 2023001);
strFormatter.close();
System.out.println(sb.toString());
}
}
常用格式说明符详解
格式说明符的完整语法是%[参数索引$][标志][宽度][.精度]转换符,下面介绍几个常用的组成部分:
- 标志:-表示左对齐,默认是右对齐;0表示用0填充宽度;+表示显示正号。
- 宽度:指定输出的最小字符数,如果内容不足宽度会用空格或者填充符补齐。
- 精度:对于浮点数,指定小数点后保留的位数;对于字符串,指定输出的最大字符数。
下面是一些进阶用法的示例:
public class FormatSpecifierDemo {
public static void main(String[] args) {
// 浮点数保留3位小数,宽度10,右对齐
System.out.printf("金额:%10.3f%n", 123.4567);
// 浮点数保留3位小数,宽度10,左对齐,用0填充
System.out.printf("金额:%-010.3f%n", 123.4567);
// 显示正号
System.out.printf("正数:%+d,负数:%+d%n", 100, -50);
// 字符串最多输出3个字符
System.out.printf("短字符串:%.3s%n", "HelloWorld");
}
}
注意事项
在使用格式化输出时需要注意几个问题:
- 格式说明符的数量必须和后面的参数数量匹配,否则会抛出IllegalFormatArgumentsException异常。
- 格式说明符的类型要和参数的类型匹配,比如用%d输出字符串会抛出异常。
- 如果需要输出%,需要使用两个%转义,比如System.out.printf("完成度:%d%%", 90);会输出完成度:90%。
- 日期时间相关的格式说明符需要传入Date或者Calendar类型的参数,比如%tF表示ISO 8601格式的日期。
合理掌握Java的格式化输出语法,可以让数据的展示更加规范清晰,减少手动拼接字符串的繁琐工作,也能避免拼接过程中出现格式错误的问题。
Java格式化输出printfString_formatFormatter修改时间:2026-06-30 11:45:25