StringBuilder和StringBuffer是String類的伴隨類。
它們表示一個(gè)可變的字符序列。
StringBuffer是線程安全的,StringBuilder不是線程安全的。
兩個(gè)類都有相同的方法,除了StringBuffer中的所有方法都是同步的。
StringBuilder對(duì)象是可修改的字符串。 StringBuilder類包含四個(gè)構(gòu)造函數(shù):
StringBuilder() StringBuilder(CharSequence seq) StringBuilder(int capacity) StringBuilder(String str)
no-args構(gòu)造函數(shù)創(chuàng)建一個(gè)默認(rèn)容量為16的空StringBuilder。
第二個(gè)構(gòu)造函數(shù)使用CharSequence對(duì)象作為參數(shù)。
它創(chuàng)建一個(gè)StringBuilder對(duì)象,其內(nèi)容與指定的CharSequence相同。
第三個(gè)構(gòu)造函數(shù)使用int作為參數(shù);它創(chuàng)建一個(gè)空的StringBuilder對(duì)象,其初始容量與指定的參數(shù)相同。
以下是創(chuàng)建StringBuilder對(duì)象的一些示例:
StringBuilder sb1 = new StringBuilder(); StringBuilder sb2 = new StringBuilder("Here is the content"); StringBuilder sb3 = new StringBuilder(200);
append()方法將文本添加到StringBuilder的結(jié)尾。它需要許多類型的參數(shù)。
insert()和delete()修改其內(nèi)容。
StringBuilder類有兩個(gè)屬性:length和capacity。
它的長(zhǎng)度是指其內(nèi)容的長(zhǎng)度,而其容量是指它可以容納而不分配新的內(nèi)存的最大字符數(shù)。
length()和capacity()方法分別返回其長(zhǎng)度和容量。例如,
public class Main { public static void main(String[] args) { StringBuilder sb = new StringBuilder(200); // Capacity:200, length:0 sb.append("Hello"); // Capacity:200, length:5 int len = sb.length(); // len is assigned 5 int capacity = sb.capacity(); // capacity is assigned 200 } }
我們可以通過(guò)使用其toString()方法將StringBuilder的內(nèi)容作為String。
public class Main { public static void main(String[] args) { // Create a String object String s1 = new String("Hello"); // Create a StringBuilder from of the String object s1 StringBuilder sb = new StringBuilder(s1); // Append " Java" to the StringBuilder"s content sb.append(" Java"); // Now, sb contains "Hello Java" // Get a String from the StringBuilder String s2 = sb.toString(); // s2 contains "Hello Java" } }
StringBuilder有一個(gè)setLength()方法,它的新長(zhǎng)度作為參數(shù)。如果新長(zhǎng)度大于舊長(zhǎng)度,則額外位置用空字符填充(空字符為\ u0000)。
如果新長(zhǎng)度小于舊長(zhǎng)度,則其內(nèi)容將被截?cái)嘁赃m應(yīng)新長(zhǎng)度。
public class Main { public static void main(String[] args) { // Length is 5 StringBuilder sb = new StringBuilder("Hello"); // Now the length is 7 with last two characters as null character "\u0000" sb.setLength(7); // Now the length is 2 and the content is "He" sb.setLength(2); } }
StringBuilder類有一個(gè)reverse()方法,它用相同的字符序列替換其內(nèi)容,但順序相反。
以下代碼顯示了StringBuilder類的一些方法的使用。
public class Main { public static void main(String[] args) { // Create an empty StringBuffer StringBuilder sb = new StringBuilder(); printDetails(sb); // Append "good" sb.append("good"); printDetails(sb); // Insert "Hi " in the beginning sb.insert(0, "Hi "); printDetails(sb); // Delete the first o sb.deleteCharAt(1); printDetails(sb); // Append " be with you" sb.append(" be with you"); printDetails(sb); // Set the length to 3 sb.setLength(3); printDetails(sb); // Reverse the content sb.reverse(); printDetails(sb); } public static void printDetails(StringBuilder sb) { System.out.println("Content: \"" + sb + "\""); System.out.println("Length: " + sb.length()); System.out.println("Capacity: " + sb.capacity()); // Print an empty line to separate results System.out.println(); } }
上面的代碼生成以下結(jié)果。
我們經(jīng)常使用+運(yùn)算符將字符串,原始類型值或?qū)ο筮B接到另一個(gè)字符串。
例如,
String str = "X" + "Y" + 12.56;
為了優(yōu)化字符串連接操作,編譯器用一個(gè)使用StringBuilder的語(yǔ)句替換字符串連接。
String str = new StringBuilder().append("X").append("Y").append(12.56).toString();
更多建議: