引言

在Java编程中,字符串格式化是一个常见的需求。无论是生成日志信息、构建用户界面显示内容,还是准备数据输出,我们经常需要将各种数据类型组合成格式化的字符串。Java提供了多种字符串格式化的方式,其中String.format()方法是最为灵活和强大的一种。

String.format方法概述

String.format()是Java中用于格式化字符串的静态方法,它允许我们使用格式说明符来控制输出的样式。该方法的签名如下:

public static String format(String format, Object... args)

其中:

  • format参数是一个格式字符串,包含固定文本和格式说明符
  • args参数是可变参数,提供要格式化的值

基本用法

1. 简单替换

最基本的用法是用%s作为占位符来插入字符串:

String name = "Alice";
int age = 25;
String message = String.format("Hello, %s! You are %d years old.", name, age);
// 输出: Hello, Alice! You are 25 years old.

2. 常用格式说明符

  • %s - 字符串
  • %d - 十进制整数
  • %f - 浮点数
  • %b - 布尔值
  • %c - 字符
  • %n - 平台特定的换行符

高级格式化选项

1. 宽度和精度控制

// 设置最小宽度为10,不足用空格填充
String.format("|%10d|", 123);    // |       123|

// 设置浮点数精度为2位小数
String.format("Price: %.2f", 19.987); // Price: 19.99

// 组合宽度和精度
String.format("|%10.2f|", 123.456);  // |    123.46|

2. 对齐方式

// 左对齐
String.format("|%-10s|", "text");    // |text      |

// 右对齐(默认)
String.format("|%10s|", "text");     // |      text|

3. 填充字符

// 用0填充数字
String.format("ID: %05d", 42);       // ID: 00042

// 用*填充字符串
String.format("|%'*10s|", "text");   // |******text|

4. 日期时间格式化

import java.util.Date;

Date now = new Date();
String.format("Current time: %tT", now);  // 输出类似: Current time: 14:35:42
String.format("Today is %tA", now);       // 输出类似: Today is Monday

参数索引

当需要多次使用同一个参数或改变参数顺序时,可以使用参数索引:

String.format("%2$s, %1$s", "Alice", "Bob"); // Bob, Alice
String.format("%1$s %1$s %1$s", "Repeat");   // Repeat Repeat Repeat

本地化支持

String.format()还可以接受Locale参数,实现本地化的格式化:

double number = 1234.56;
String.format(Locale.US, "%,.2f", number);   // 1,234.56
String.format(Locale.GERMANY, "%,.2f", number); // 1.234,56

与System.out.printf的关系

System.out.printf()内部实际上就是使用String.format()来实现的:

System.out.printf("Value: %d", 42);
// 等价于
System.out.print(String.format("Value: %d", 42));

性能考虑

虽然String.format()非常方便,但在性能敏感的场景中(如大量循环中使用),它的性能可能不如简单的字符串连接。这是因为:

  1. 它需要解析格式字符串
  2. 涉及更多的对象创建和方法调用

在性能关键路径上,可以考虑使用StringBuilder或其他方式。

实际应用示例

1. 表格格式输出

String[] names = {"Alice", "Bob", "Charlie"};
int[] ages = {25, 30, 35};
double[] salaries = {55000.5, 65000.75, 75000.0};

System.out.println("| Name    | Age | Salary    |");
System.out.println("|---------|-----|-----------|");
for (int i = 0; i < names.length; i++) {
    System.out.println(String.format("| %-7s | %3d | %9.2f |", 
        names[i], ages[i], salaries[i]));
}

2. 日志消息格式化

String user = "admin";
String action = "login";
Date timestamp = new Date();

String log = String.format("[%tF %<tT] User '%s' performed '%s' action", 
    timestamp, user, action);
// 输出类似: [2023-05-15 14:30:45] User 'admin' performed 'login' action

总结

String.format()是Java中一个强大而灵活的字符串格式化工具,它:

  1. 提供了丰富的格式化选项
  2. 支持本地化输出
  3. 允许精确控制输出的布局和样式
  4. 简化了复杂字符串的构建过程

掌握String.format()的使用可以显著提高代码的可读性和维护性,特别是在需要生成格式化的输出时。虽然在某些性能敏感场景可能需要考虑替代方案,但在大多数应用中,它都是字符串格式化的首选方法。

扩展阅读

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐