系列中的上一篇
当前教程
字符串构建器
系列中的下一篇

系列中的上一篇: 字符串

系列中的下一篇: 自动装箱和拆箱

字符串构建器

 

StringBuilder 类

String 对象类似于 StringBuilder 对象,只是它们可以被修改。在内部,这些对象被视为包含字符序列的可变长度数组。在任何时候,序列的长度和内容都可以通过方法调用进行更改。

除非字符串构建器在更简单的代码(参见本节末尾的示例程序)或更好的性能方面提供了优势,否则应始终使用字符串。在 Java SE 9 之前,如果您需要连接大量字符串,则将字符串追加到 StringBuilder 对象可能更有效。Java SE 9 中的字符串连接已优化,使连接比 StringBuilder 追加更有效。

 

长度和容量

String 类类似,StringBuilder 类也具有 length() 方法,该方法返回构建器中字符序列的长度。

与字符串不同,每个字符串构建器还具有容量,即已分配的字符空间数。容量由 capacity() 方法返回,它始终大于或等于长度(通常大于),并且会根据需要自动扩展以适应字符串构建器的添加。

您可以使用 StringBuilder 类的以下构造函数

例如,以下代码

// creates empty builder, capacity 16
StringBuilder sb = new StringBuilder();
// adds 9 character string at beginning
sb.append("Greetings");

将生成一个长度为 9、容量为 16 的字符串构建器

Length and capacity of a `StringBuilder`

StringBuilder 的长度和容量

StringBuilder 类有一些与长度和容量相关的,String 类没有的方法

许多操作(例如,append()insert()setLength() 可以增加字符串构建器中字符序列的长度,以使结果 length() 大于当前 capacity()。当这种情况发生时,容量会自动增加。

 

StringBuilder 操作

StringBuilder 上不可用于 String 的主要操作是 append()insert() 方法,它们被重载以接受任何类型的数据。每个方法将其参数转换为字符串,然后将该字符串的字符追加或插入到字符串构建器中的字符序列中。append 方法始终在现有字符序列的末尾添加这些字符,而 insert 方法在指定的位置添加这些字符。

以下是 StringBuilder 类的一些方法。

注意:您可以对 StringBuilder 对象使用任何 String 方法,方法是首先使用 toString() 方法将字符串构建器转换为字符串。然后使用 StringBuilder(String string) 构造函数将字符串转换回字符串构建器。

 

StringBuilder 的实际应用

在标题为“字符串”的部分中列出的 StringDemo 程序是一个示例程序,如果使用 StringBuilder 而不是 String,该程序将更有效。

StringDemo 反转了一个回文。以下是它的清单

public class StringDemo {
    public static void main(String[] args) {
        String palindrome = "Dot saw I was Tod";
        int len = palindrome.length();
        char[] tempCharArray = new char[len];
        char[] charArray = new char[len];
        
        // put original string in an 
        // array of chars
        for (int i = 0; i < len; i++) {
            tempCharArray[i] = 
                palindrome.charAt(i);
        } 
        
        // reverse array of chars
        for (int j = 0; j < len; j++) {
            charArray[j] =
                tempCharArray[len - 1 - j];
        }
        
        String reversePalindrome =
            new String(charArray);
        System.out.println(reversePalindrome);
    }
}

运行该程序会产生以下输出

doT saw I was toD

为了完成字符串反转,该程序将字符串转换为字符数组(第一个 for 循环),将数组反转到第二个数组(第二个 for 循环),然后转换回字符串。

如果您将回文字符串转换为字符串构建器,则可以使用 reverse() 方法在 StringBuilder 类中。它使代码更简单,更易于阅读

public class StringBuilderDemo {
    public static void main(String[] args) {
        String palindrome = "Dot saw I was Tod";
         
        StringBuilder sb = new StringBuilder(palindrome);
        
        sb.reverse();  // reverse it
        
        System.out.println(sb);
    }
}

运行此程序会产生相同的输出

doT saw I was toD

注意,println() 打印字符串构建器,如

System.out.println(sb);

因为 sb.toString() 被隐式调用,就像在任何其他 println 调用中的任何其他对象一样。

注意:还有一个 StringBuffer 类,它与 StringBuilder 类完全相同,只是它通过使其方法同步而线程安全。除非您绝对需要线程安全的类,否则您不需要使用 StringBuffer


最后更新: 2021年9月14日


系列中的上一篇
当前教程
字符串构建器
系列中的下一篇

系列中的上一篇: 字符串

系列中的下一篇: 自动装箱和拆箱