今天要來介紹四種名字看起來超像但功能又不太一樣的String類別,話不多說直接開始ㄅ!
之前在Day5有介紹過這個類別。它是不可變的(immutable)字串,也就是說一旦宣告就不能在原所在記憶體位置改變內容。
跟String類別不一樣的是,它是個可變(mutable)的字串,可以直接在原字串所在的記憶體位置改變字串內容,如果需要可以更改字串的內容,那麼就必須利用StringBuffer類別而不是用String。
StringBuffer sb = new StringBuffer() // 建立一個不包含任何字元的字串
StringBuffer sb1 = new StringBuffer(String str) // 根據str的內容建立字串
既然是可以改變的,Java有提供幾種方法來改變字串。
append()會在字串的最後加入資料,並且有多重定義的版本,可以傳入基本型別、String物件及其他有定義toString()方法的物件。
第一個參數是索引值,也就是將字串或字元加到指定的位置,如果指定的索引值超出長度會發生錯誤。
兩個參數分別是start起始值和end終止值,可以刪除從start的索引值開始到end-1之間的一段字串。
String str = "aa";
StringBuffer sb = new StringBuffer(str);
sb = sb.append('b'); // aab
sb = sb.insert(1, 'c'); // acab
sb = sb.insert(5, 'd'); // 超出長度,發生錯誤
sb = sb.delete(1, 3); // ab
StringBuilder類別是JDK1.5的新類別,裡面API的方法跟StringBuffer一樣,StringBuffer和StringBuilder之間的主要區別在於StringBuilder的方法不是線程安全的也就是不是同步的,而StringBuilder的速度更快,所以在實作上,如果不考慮多執行緒同步的問題,會建議用StringBuilder來提升執行的效率。
它可以把一個字串分成好幾個字串(token),java預設的分隔符號是空格("")、制表(\t)、换行(\n)和回車(\r),當然也可以自己設定想要使用的分隔符號,底下的例子就是使用"-"。
StringTokenizer st = new StringTokenizer("Nice to meet you");
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
StringTokenizer st1 = new StringTokenizer("Nice-to-meet-you","-");
while (st1.hasMoreTokens()) {
System.out.println(st1.nextToken());
}
輸出結果如下:
Nice
to
meet
you
Nice
to
meet
you