String.format
详解
在 Java 中,String.format
是一个用于格式化字符串的静态方法。它允许你按照特定的格式将数据插入到字符串中。String.format
通过使用占位符和格式化标记,可以生成具有指定格式的字符串。
📝 语法
String formattedString = String.format(String format, Object... args);
format
:格式化字符串,包含一个或多个格式化占位符,用于指定如何格式化各个参数。args
:格式化字符串中占位符的实际参数,这些参数会被插入到格式化字符串中的指定位置。
🎯 常见用途
- 基本字符串格式化
String formatted = String.format("Hello, %s!", "World"); System.out.println(formatted); // 输出:Hello, World!
- 数字格式化
double pi = 3.14159; String formatted = String.format("Value of pi: %.2f", pi); System.out.println(formatted); // 输出:Value of pi: 3.14
- 整数格式化
int num = 123; String formatted = String.format("The number is: %d", num); System.out.println(formatted); // 输出:The number is: 123
- 宽度和填充
String formatted = String.format("|%10s|", "abc"); System.out.println(formatted); // 输出:| abc|
这里%10s
表示输出的字符串至少占 10 个字符宽度,如果实际字符串短于 10 个字符,则使用空格填充。 - 格式化日期
java.util.Date date = new java.util.Date(); String formattedDate = String.format("Current date: %tF", date); System.out.println(formattedDate); // 输出:Current date: 2025-07-19
🔑 格式化占位符说明
String.format
使用占位符来指示如何格式化输入数据。常见的占位符如下:
- 整数类型
%d
:格式化为十进制整数。%x
:格式化为十六进制整数。%o
:格式化为八进制整数。
int num = 255; String formatted = String.format("Hex: %x", num); System.out.println(formatted); // 输出:Hex: ff
- 浮动点数类型
%f
:格式化为浮动点数(默认显示小数点后 6 位)。%.2f
:保留两位小数。
double pi = 3.141592653589793; String formatted = String.format("Pi to 2 decimal places: %.2f", pi); System.out.println(formatted); // 输出:Pi to 2 decimal places: 3.14
- 字符串类型
%s
:格式化为字符串。%10s
:格式化字符串并右对齐,宽度至少为 10 个字符。
String name = "Alice"; String formatted = String.format("Name: %10s", name); System.out.println(formatted); // 输出:Name: Alice
- 日期和时间类型
%tF
:格式化为 ISO 日期(YYYY-MM-DD
)。%tT
:格式化为时间(HH:MM:SS
)。%tD
:格式化为日期(MM/DD/YY
)。
java.util.Date date = new java.util.Date(); String formatted = String.format("Current date: %tF", date); System.out.println(formatted); // 输出:Current date: 2025-07-19
- 其他常见占位符
%c
:格式化为字符。%b
:格式化为布尔值。
boolean isActive = true; String formatted = String.format("Is active? %b", isActive); System.out.println(formatted); // 输出:Is active? true
🎨 高级格式化选项
1. 填充与对齐
使用宽度和填充符号,可以控制输出的对齐方式。默认情况下,字符串会右对齐,数字会右对齐。
- 填充字符:你可以指定一个填充字符,默认为空格。
String formatted = String.format("|%-10s|", "left"); System.out.println(formatted); // 输出:|left |
这里的%-10s
表示字符串左对齐,占 10 个字符宽度,空格用作填充。
2. 宽度和精度控制
- 浮动点数的精度:通过
%.2f
这样的语法来控制小数点后的位数。 - 最小宽度:通过
%10s
这样的语法来指定字符串最小宽度为 10 个字符,若字符串不足 10 个字符,自动填充空格。double value = 123.456789; String formatted = String.format("%.2f", value); System.out.println(formatted); // 输出:123.46
3. 多重格式化
你可以在同一格式字符串中使用多个占位符来格式化多个数据。
String name = "Alice";
int age = 30;
double height = 1.75;
String formatted = String.format("%s is %d years old and %.2f meters tall.", name, age, height);
System.out.println(formatted);
// 输出:Alice is 30 years old and 1.75 meters tall.
⚠️ 注意事项
- 字符串长度限制:
如果格式化字符串的长度不足以容纳输出,String.format
会自动扩大输出的长度。但是,如果使用负数宽度或格式不匹配(比如在一个int
上使用%s
),则会抛出IllegalFormatException
。 - 性能考虑:
String.format
的性能相对较低,如果你有频繁的格式化操作,可能需要考虑其他方法,如StringBuilder
或StringBuffer
,特别是在循环中使用时。
总结
String.format
是一个功能强大的字符串格式化工具,能够根据你指定的格式,插入不同类型的变量到字符串中。它提供了丰富的格式控制选项,适用于显示浮动点数、日期、整数、字符串等。掌握 String.format
的用法可以帮助你更灵活地处理字符串,提升代码的可读性和维护性。
发表回复