Java String、StringBuffer和StringBuilder類

NO IMAGE

String類是不可變類,即一旦一個String物件被建立以後,包括在這個物件中的字元序列是不可改變的,直至這個物件被銷燬

StringBuffer物件則代表一個字元序列可變的字串,當一個StringBuffer被建立以後,通過StringBuffer提供的append()、insert()、reverse()、setCharAt()、setLength()等方法可以改變這個字串物件的字元序列。可以呼叫toString()方法將其轉換為一個String()物件

StringBuffer是執行緒安全的,StringBuilder則沒有實現執行緒安全功能,所以效能略高。如果需要建立一個內容可變的字串物件,則應該優先考慮使用StringBuilder類

在單執行緒環境下應該使用StringBuilder來保證較好的效能;當需要保證多執行緒安全時,就應該使用StringBuffer

String、StringBuffer和StringBuilder都實現了CharSequence介面,該介面可認為是一個字串的協議介面。

String類提供了大量構造器來建立String物件:

String():建立一個包含0個字串序列的String物件(並不是返回null)

String(byte[] bytes, Charset charset):使用指定的字符集將指定的byte[]陣列解碼成一個新的String物件

String(byte[] bytes, int offset, int length):使用平臺的預設字符集將指定的byte[]陣列從offset開始、長度為Length的子陣列解碼成一個新的String物件

String(byte[] bytes, int offset, int length, String charsetName):使用指定的字符集將指定的byte[]陣列從offset開始、長度為Length的子陣列解碼成一個新的String物件

String(byte[] bytes, String charsetName):使用指定的字符集將指定的byte[]陣列解碼成一個新的String物件

String(char[] value, int offset, int count):將指定的字元陣列從offset開始、長度為count的字元元素連綴成字串

String(String original):根據字串直接量來建立一個String物件。新建立的String物件是該引數字串的副本

String(StringBuffer buffer):根據StringBuffer物件來建立對應的String物件

String(StringBuilder builder):根據StringBuilder物件來建立對應的String物件

操作字串物件的方法

char charAt(int index):獲取字串中的某一個字元,其中的引數 index 指的是字串中序數。字串的序數從0開始到length()-1

int compareTo (String anotherString ):當前String物件與anotherString比較 。相等返回0;不相等 時,從兩個字串第 0 個字元開始比較,返回第一個不相等的字元差,另一種情況,較長字串的前面部分恰巧是較短的字串,返回它們的長度差

String a1 = new String("abcdefghijklmn");
String a2 = new String("abcdefghij");
String a3 = new String("abcdefghijalmn");
System.out.println("a1.compareTo(a2):" a1.compareTo(a2));    //返回長度差 4
System.out.println("a1.compareTo(a3):" a1.compareTo(a3));    //返回'k'-'a'的差 10

String concat(String str):將該String物件與str 連線在一起。通過“ ”串聯更方便

boolean contentEquals(StringBuffer sb):將該 String物件與StringBuffer的物件sb進行比較。相等返回 true

static String copyValueOf(char[] data):將字元陣列連綴成字串,與String(char[] content)構造器的功能相同

static String copyValueOf(char[] data, int offset, int count):將char陣列的子陣列中的元素連綴成字串,與String(char[] value, int offset, int count)構造器的功能相同

boolean endsWith(String suffix):返回該字串是否以suffix結尾

String f1 = "www.ishuhui.com";
String f2= "com";
System.out.println("f1.endsWith(f2):"   f1.endsWith(f2));        //true

boolean equals(Object anObject):當anObject不為空並且與當前String物件一樣,返回 true;否則,返回 false

boolean equalsIgnoreCase(String string):比較字串與another是否一樣(忽略大小寫)

byte[] getBytes(String charsetName):將該String物件轉換成byte陣列

byte[] getBytes(Charset charset):使用指定字符集,將該String物件轉換成byte陣列

byte[] getBytes():將該String物件轉換成byte陣列,使用預設字符集

void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin):將字串中從srcBegin開始,到srcEnd結束的字元負責到dst字元陣列中,其中dstBegin為目標字元陣列的起始複製位置

char[] c1 = {'L','I','N',' ','B','o','K','a','i'};
String s8 = new String("Me ");
s8.getChars(0, 3, c1, 0);
System.out.println(c1);

int hashCode ():返回當前字元的雜湊表碼

int indexOf(int c):找出c字元在該字串中第一次出現的位置

int indexOf(int c, int fromIndex):找出c字元在該字串中從fromIndex開始後第一次出現的位置

int indexOf(String substr):找出substr子字串在該字串中第一次出現的位置

int indexOf(String substr, int fromIndex):找出substr子字串中從fromIndex開始後在該字串中第一次出現的位置

boolean isEmpty():如果字串的長度為0,則返回 true

int lastindexOf(int c):找出c字元在該字串中最後一次出現的位置

int lastindexOf(int c, int fromIndex):找出c字元在該字串中從fromIndex開始後最後一次出現的位置

int lastindexOf(String substr):找出substr子字串在該字串中最後一次出現的位置

int lastindexOf(String substr, int fromIndex):找出substr子字串中從fromIndex開始後在該字串中最後一次出現的位置

int length():返回字串的字元個數

String replace(char oldChar, char newChar):將字串中的第一個oldChar替換成newChar

boolean startsWith(String prefix):該String物件是否以prefix開始

boolean startsWith(String prefix, int toffset):該String物件從toffse 位置算起,是否以 prefix開始

String substring(int beginIndex):取從beginIndex位置開始到結束的子字串

String substring(int beginIndex, int endIndex)取從beginIndex位置開始到endIndex位置結束的子字串

char[] toCharArray():將該String物件轉換成char陣列

String toLowerCase():將字串轉換成小寫

String toUpperCase():將字串轉換成大寫

String trim():移除字串中的空格

static String valueOf(X x):將基本型別值轉換成字串的方法

String類是不可變的,String的例項一旦生成就不會再改變

String str1 = "java";
str1 = str1   "struts";
str1 = str1   "spring";

上面程式除了使用了3個字串直接量之外,還會額外生成2個字串直接量”javastruts”和”javastrutsspring”,程式中的str1依次指向3個不同的字串物件
因為String是不可變的,所以會產生很多臨時變數,使用StringBuffer和StringBuilder就可以避免這個問題。

public class StringBuilderTest
{
public static void main(String[] args)
{
StringBuilder sb = new StringBuilder();
// 追加字串
sb.append("java");//sb = "java"
// 插入
sb.insert(0 , "hello "); // sb="hello java"
// 替換
sb.replace(5, 6, ","); // sb="hello, java"
// 刪除
sb.delete(5, 6); // sb="hellojava"
System.out.println(sb);
// 反轉
sb.reverse(); // sb="avajolleh"
System.out.println(sb);
System.out.println(sb.length()); // 輸出9
System.out.println(sb.capacity()); // 輸出16
// 改變StringBuilder的長度,將只保留前面部分
sb.setLength(5); // sb="avajo"
System.out.println(sb);
}
}