StringBuilder类StringBuilder对象与String对象类似,只是它可以被修改,在内部,这些对象被视为包含一系列字符的可变长度数组,在任何时候,可以通过方法调用来改变序列的长度和内容。除非字符串构建器在更简单的代码(参见本节末尾的示例程序)或更好的性能方面提供优势,否则应始终使用字符串,例如,如果需要连接大量字符串,则附加到StringBuilder对象会更有效。长度和容量与String类一样,StringBuilder类有一个length()方法,该方法返回构建器中字符序列的长度。与字符串不同,每个字符串构建器还具有容量,即已分配的字符空间数,capacity()方法返回的容量始终大于或等于长度(通常大于),并将根据需要自动扩展以适应字符串构建器的添加。StringBuilder构造函数:构造函数描述StringBuilder()创建一个容量为16的空字符串构建器(16个空元素)。StringBuilder(CharSequence cs)构造一个字符串构建器,其中包含与指定CharSequence相同的字符,以及尾随CharSequence的额外16个空元素。StringBuilder(int initCapacity)创建具有指定初始容量的空字符串构建器。StringBuilder(String s)创建一个字符串构建器,其值由指定的字符串初始化,另外还有16个空元素尾随该字符串。例如,以下代码:// creates empty builder, capacity 16StringBuilder sb = new StringBuilder();// adds 9 character string at beginningsb.append(“Greetings”);将生成一个长度为9且容量为16的字符串构建器:StringBuilder类有一些与String类没有的长度和容量相关的方法:方法描述void setLength(int newLength)设置字符序列的长度;如果newLength小于length(),则截断字符序列中的剩余字符;如果newLength大于length(),则在字符序列的末尾添加null字符。void ensureCapacity(int minCapacity)确保容量至少等于指定的最小值。许多操作(例如,append()、insert()或setLength())可以增加字符串构建器中字符序列的长度,从而使结果length()大于capacity(),发生这种情况时,容量会自动增加。StringBuilder操作String中不可用的StringBuilder上的主要操作是append()和insert()方法,它们被重载以接受任何类型的数据,每个都将其参数转换为字符串,然后将该字符串的字符追加或插入字符串构建器中的字符序列,append方法总是在现有字符序列的末尾添加这些字符,而insert方法在指定点添加字符。以下是StringBuilder类的许多方法。方法描述StringBuilder append(boolean b)StringBuilder append(char c)StringBuilder append(char[] str)StringBuilder append(char[] str, int offset, int len)StringBuilder append(double d)StringBuilder append(float f)StringBuilder append(int i)StringBuilder append(long lng)StringBuilder append(Object obj)StringBuilder append(String s)将参数追加到此字符串构建器,在附加操作发生之前,数据将转换为字符串。StringBuilder delete(int start, int end)StringBuilder deleteCharAt(int index)第一个方法在StringBuilder的字符序列中删除从start到end-1(包括)的子序列;第二种方法删除位于索引处的字符。StringBuilder insert(int offset, boolean b)StringBuilder insert(int offset, char c)StringBuilder insert(int offset, char[] str)StringBuilder insert(int index, char[] str, int offset, int len)StringBuilder insert(int offset, double d)StringBuilder insert(int offset, float f)StringBuilder insert(int offset, int i)StringBuilder insert(int offset, long lng)StringBuilder insert(int offset, Object obj)StringBuilder insert(int offset, String s)将第二个参数插入到字符串构建器中;第一个整数参数表示要在其之前插入数据的索引;在插入操作发生之前,数据将转换为字符串。StringBuilder replace(int start, int end, String s)void setCharAt(int index, char c)替换此字符串构建器中的指定字符。StringBuilder reverse()反转此字符串构建器中的字符序列。String toString()返回包含构建器中的字符序列的字符串。你可以在StringBuilder对象上使用任何String方法,首先使用StringBuilder类的toString()方法将字符串构建器转换为字符串,然后使用StringBuilder(String str)构造函数将字符串转换回字符串构建器。一个例子标题为“字符串”一节中列出的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循环),然后转换回字符串。如果将palindrome字符串转换为字符串构建器,则可以在StringBuilder类中使用reverse()方法,它使代码更简单,更易于阅读: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类完全相同,但它是线程安全的,因为它的方法是同步的,线程将在关于并发的课程中讨论。上一篇:比较字符串和字符串的部分