String.format 详解

在 Java 中,String.format 是一个用于格式化字符串的静态方法。它允许你按照特定的格式将数据插入到字符串中。String.format 通过使用占位符和格式化标记,可以生成具有指定格式的字符串。

📝 语法

String formattedString = String.format(String format, Object... args);
  • format:格式化字符串,包含一个或多个格式化占位符,用于指定如何格式化各个参数。
  • args:格式化字符串中占位符的实际参数,这些参数会被插入到格式化字符串中的指定位置。

🎯 常见用途

  1. 基本字符串格式化String formatted = String.format("Hello, %s!", "World"); System.out.println(formatted); // 输出:Hello, World!
  2. 数字格式化double pi = 3.14159; String formatted = String.format("Value of pi: %.2f", pi); System.out.println(formatted); // 输出:Value of pi: 3.14
  3. 整数格式化int num = 123; String formatted = String.format("The number is: %d", num); System.out.println(formatted); // 输出:The number is: 123
  4. 宽度和填充String formatted = String.format("|%10s|", "abc"); System.out.println(formatted); // 输出:| abc| 这里 %10s 表示输出的字符串至少占 10 个字符宽度,如果实际字符串短于 10 个字符,则使用空格填充。
  5. 格式化日期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 使用占位符来指示如何格式化输入数据。常见的占位符如下:

  1. 整数类型
    • %d:格式化为十进制整数。
    • %x:格式化为十六进制整数。
    • %o:格式化为八进制整数。
    int num = 255; String formatted = String.format("Hex: %x", num); System.out.println(formatted); // 输出:Hex: ff
  2. 浮动点数类型
    • %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
  3. 字符串类型
    • %s:格式化为字符串。
    • %10s:格式化字符串并右对齐,宽度至少为 10 个字符。
    String name = "Alice"; String formatted = String.format("Name: %10s", name); System.out.println(formatted); // 输出:Name: Alice
  4. 日期和时间类型
    • %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
  5. 其他常见占位符
    • %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.

⚠️ 注意事项

  1. 字符串长度限制
    如果格式化字符串的长度不足以容纳输出,String.format 会自动扩大输出的长度。但是,如果使用负数宽度或格式不匹配(比如在一个 int 上使用 %s),则会抛出 IllegalFormatException
  2. 性能考虑
    String.format 的性能相对较低,如果你有频繁的格式化操作,可能需要考虑其他方法,如 StringBuilder 或 StringBuffer,特别是在循环中使用时。

总结

String.format 是一个功能强大的字符串格式化工具,能够根据你指定的格式,插入不同类型的变量到字符串中。它提供了丰富的格式控制选项,适用于显示浮动点数、日期、整数、字符串等。掌握 String.format 的用法可以帮助你更灵活地处理字符串,提升代码的可读性和维护性。