StringBuilder:
StringBuilder代表可變字符串對象,相當于一個容器,它里面裝的字符串是可以改變的,就是用來操作字符串的。
好處: StringBuilder比String更適合做字符串的修改操作,效率會更高,代碼會更簡潔。
API文檔:
?StringBuilder功能真的非常豐富。
package cn.ensource.d16_stringbuiilder;public class Test {public static void main(String[] args) {// 目標:搞清楚StringBuilder的用法和作用StringBuilder s = new StringBuilder("itheima");// 1. 拼接內容s.append(" Java");s.append(123);// 2. 支持鏈式編程的s.append(666).append("黑馬");// 3. reverse方法System.out.println(s);s.reverse();System.out.println(s);// 4. length,返回字符串的長度System.out.println(s.length());// 5. 把StringBuilder對象又轉換成String類型String res = s.reverse().toString();System.out.println(res);}
}
支持鏈式編程。append方法。
為啥我們的Java建議使用StringBuilder,而不用原來學過的String?
package cn.ensource.d16_stringbuiilder;public class Test2 {public static void main(String[] args) {// 目標:掌握StringBuilder的好處// 需求:要拼接100萬次abc// 先用String測試性能
// String rs = "";
// for (int i = 1; i <= 1000000; i++) {
// rs = rs + "abc";
// }
// System.out.println(rs);// 使用StringBuilder演示StringBuilder s = new StringBuilder();for (int i = 1; i <= 1000000; i++) {s.append("abc");}System.out.println(s);// 可見StringBuilder操作字符串非常快速!!!!}
}
今后:
對于字符串的相關的操作,如果頻繁的拼接、修改等,建議使用StringBuilder,效率高!!!
注意:如果操作字符串較少,或者不需要修改,以及定義字符串變量,還是建議使用String。
StringBuffer和StringBuilder:
注意:
StringBuffer的用法與StringBuilder是一模一樣的。
但是StringBuilder是線程不安全的,StringBuffer是線程安全的。
兩者API的方法基本上都是一樣的。
將來很多用戶進入系統,會存在線程不安全的情況。現在我們先記住這個觀點。
案例:
返回任意整形數組的內容:
需求:
設計一個方法,用于返回任意整形數組的內容,要求返回的數組內容格式如:[11, 22, 33]
分析:
1)方法是否要接收數據呢?需要接收整形數組。
2)方法是否需要返回數據呢?需要返回一個拼接的結果,字符串類型
3)方法內部:遍歷數組的數據,把遍歷的數據都拼接起來,此時使用StringBuilder來完成拼接。
package cn.ensource.d16_stringbuiilder;public class Test3 {public static void main(String[] args) {// 案例String res = getArrayData(new int[]{11, 22, 33});System.out.println(res);}/*** getArrayData方法*/public static String getArrayData(int[] arr) {// 判斷arr是否為nullif (arr == null || arr.length == 0) {return null;}StringBuilder sb = new StringBuilder();sb.append("[");for (int i = 0; i < arr.length; i++) {sb.append(arr[i]);if (i != arr.length - 1) {sb.append(", ");}}sb.append("]");return sb.toString();}
}