JDK 自带的拼接或格式化字符串的方式

在 Java 开发中,字符串的拼接和格式化是一项常见任务。JDK 提供了多种方式来实现这一功能,包括传统的 + 运算符、StringBuilderStringBuffer 类,以及更现代的模板表达式。本文将详细介绍这些方法的特点、使用场景及示例代码。

一、传统字符串拼接方式

1. 使用 + 运算符

这是最简单也是最常用的字符串拼接方式。然而,它在性能上并不是最优的选择,特别是在频繁进行大量字符串拼接时。

示例代码:

1
2
String str = "Hello, " + "world!";
System.out.println(str); // 输出: Hello, world!

2. 使用 concat() 方法

concat() 方法是 String 类的一个成员方法,用于连接两个字符串。它比 + 运算符稍微高效一些,但仍然不适合大量拼接操作。

示例代码:

1
2
3
4
String str1 = "Hello, ";
String str2 = "world!";
String result = str1.concat(str2);
System.out.println(result); // 输出: Hello, world!

3. 使用 StringBuilder

StringBuilder 是可变的字符串序列,适用于需要频繁修改字符串的场景。它在大多数情况下比 +concat() 更高效。

示例代码:

1
2
3
4
StringBuffer sb = new StringBuffer();
sb.append("Hello, ");
sb.append("world!");
System.out.println(sb.toString()); // 输出: Hello, world!

4. 使用 StringBuffer

StringBufferStringBuilder 类似,但它是线程安全的,因此在多线程环境下推荐使用。不过,由于同步机制的存在,它的性能略低于 StringBuilder

示例代码:

1
2
3
4
StringBuffer sb = new StringBuffer();
sb.append("Hello, ");
sb.append("world!");
System.out.println(sb.toString()); // 输出: Hello, world!

二、格式化字符串

1. 使用 String.format()

String.format() 方法允许你创建一个格式化的字符串,并将指定数量的参数插入到字符串中的占位符位置。

示例代码:

1
2
3
4
int x = 10;
int y = 20;
String formattedStr = String.format("The sum of %d and %d is %d", x, y, (x + y));
System.out.println(formattedStr); // 输出: The sum of 10 and 20 is 30

2. 使用 MessageFormat

MessageFormat 类可以处理包含占位符的模式字符串,并替换为相应的参数值。它特别适合国际化应用场景。

示例代码:

1
2
3
4
Object[] params = {"John", "Doe", 30};
String pattern = "Name: {0}, Lastname: {1}, Age: {2}";
String message = MessageFormat.format(pattern, params);
System.out.println(message); // 输出: Name: John, Lastname: Doe, Age: 30

三、现代模板表达式(自JDK 21引入)

1. STR 模板处理器

STR 是一种简化字符串拼接的方式,支持插值表达式,使代码更加简洁易读。

示例代码:

1
2
3
String blog = "blog.didispace.com";
String str = STR."My blog is \{blog}";
System.out.println(str); // 输出: My blog is blog.didispace.com

2. FMT 模板处理器

FMT 不仅支持插值,还支持格式说明符,类似于 String.format() 的功能,但语法更加直观。

示例代码:

1
2
3
4
5
6
7
8
9
10
record Rectangle(String name, double width, double height) {
double area() { return width * height; }
}
Rectangle[] zone = new Rectangle[] { ... };
String table = FMT."""
Description Width Height Area
%-12s\{zone[0].name} %7.2f\{zone[0].width} %7.2f\{zone[0].height} %7.2f\{zone[0].area()}
...
""";
System.out.println(table);

四、性能对比与最佳实践

  • 少量拼接:对于少量的字符串拼接,使用 + 运算符或 concat() 方法即可满足需求。
  • 频繁拼接:在需要频繁拼接大量字符串时,应优先选择 StringBuilder 以提高性能。
  • 多线程环境:在多线程环境下,建议使用 StringBuffer 以确保线程安全。
  • 复杂格式化:对于复杂的字符串格式化需求,可以使用 String.format()MessageFormat
  • 现代应用:对于最新的 JDK 版本,可以考虑使用模板表达式来简化代码结构,提高可读性和维护性。

综上所述,JDK 提供了丰富的工具来处理字符串拼接和格式化任务。根据具体的应用场景选择合适的方法,可以有效提升代码的性能和可维护性。

[!NOTE]

这是一篇借助 GPT 工具生成的博文,我做了一些修改。


JDK 自带的拼接或格式化字符串的方式
https://blog.yohlj.cn/posts/e60cc154/
作者
Enoch
发布于
2024年6月3日
许可协议