1. 概述

在Java编程中,处理字符串是基础操作。StringBuilder是字符串处理的常用工具,常用于拼接、反转等操作。掌握String与StringBuilder之间的转换技巧,对高效处理字符串至关重要。

本文将快速演示如何实现这些转换操作。

2. 问题背景

Java中的String是不可变的,一旦创建就不能修改。而StringBuilder是可变字符序列,允许我们在不创建新对象的情况下修改内容

因此,我们通常将String转换为StringBuilder进行操作,然后再将StringBuilder转换回String获取结果。

我们先看StringBuilder转String,再看反向转换。最后通过一个实际问题应用这些技巧。

为简化演示,我们将使用单元测试断言验证结果。

3. 将StringBuilder转换为String

调用StringBuilder.toString()是最直接的转换方式:

StringBuilder sb = new StringBuilder("Converting SB to String");
String result = sb.toString();
assertEquals("Converting SB to String", result);

toString()方法返回包含StringBuilder字符序列的String,顺序保持不变。

有时我们只需要转换部分字符序列,这时可使用substring()方法:

result = sb.substring(11, 13);
assertEquals("SB", result);

通过传入起始和结束索引,substring()可提取StringBuilder字符序列的指定部分。

接下来看反向操作:将String转换为StringBuilder。

4. 将String转换为StringBuilder

直接将String对象传给StringBuilder构造函数即可:

String input = "Converting String to SB";
StringBuilder sb = new StringBuilder(input);
assertEquals(input, sb.toString());

也可先创建空StringBuilder实例,再用append()方法添加字符串:

String input = "C C++ C# Ruby Go Rust";
StringBuilder sb = new StringBuilder().append(input);
assertEquals(input, sb.toString());

当处理单个字符串时,这种方式不如构造函数直观。但在处理多个字符串时特别有用,例如:

String[] strings = new String[] { "C ", "C++ ", "C# ", "Ruby ", "Go ", "Rust" };
StringBuilder sb2 = new StringBuilder();
for (String str : strings) {
    sb2.append(str);
}
assertEquals(input, sb2.toString());

创建空StringBuilder后,通过循环调用append()将字符串数组所有元素添加到字符序列中。

5. 实战案例:拼接与反转

最后用学到的转换技巧解决实际问题。

给定三个字符串,按以下步骤处理:

  1. 用" | "连接三个字符串
  2. 反转连接结果

这是典型的字符串转换问题,用StringBuilder可轻松解决:

String str1 = "c b a";
String str2 = "^_*";
String str3 = "z y x";
 
StringBuilder sb = new StringBuilder(str1)
  .append(" | ")
  .append(str2)
  .append(" | ")
  .append(str3)
  .reverse();
String result = sb.toString(); 
assertEquals("x y z | *_^ | a b c", result);

代码通过构造函数创建StringBuilder,用append()添加分隔符和其他字符串,最后调用reverse()反转字符序列。sb.toString()将结果转回String。

6. 总结

本文探讨了String与StringBuilder的相互转换方法。掌握这些技巧后,我们能在Java程序中高效处理字符串操作。

完整示例代码可在GitHub获取。


原始标题:How to Convert String to StringBuilder and Vice Versa in Java | Baeldung