Java基礎-StringBuffer類與StringBuilder類簡介

              Java基礎-StringBuffer類與StringBuilder類簡介
編程

                                      做者:尹正傑數組

版權聲明:原創做品,謝絕轉載!不然將追究法律責任。安全

 

 

 

 

 

一.StringBuffer類網絡

  在學習過String類以後,咱們發現該類功能甚是強大。查看過API的小夥伴應該知道字符串緩衝區支持可變的字符串,說你是字符串緩衝區呢?接下來咱們來研究一下字符串緩衝區。app

  String在存儲數據時,過於浪費內存,所以誕生了StringBuffer類,它是一個相似於 String 的字符串緩衝區,但不能修改。咱們能夠經過下圖看出,若要新生成一個字符串「res」時,須要在堆內存中建立出"yinzhengjie"和"M19"的內存對象,而最終有用的只有最後審查的字符串「yinzhengjieM19」有用,也就是res變量。而咱們若是建立了StringBuffer對象以後,會明顯發現存儲以前的字符串始終只用了一塊內存空間,當內存的值未滿時,就會一直填充,而建立的對象也就始終只有它一個(一個StringBuffer默認字符緩衝區是16個字符)。ide

 二.StringBuffer類經常使用的方法學習

1>.append方法ui

 

  經過查閱相關API說明文檔,能夠說是StringBuffer對象的append方法能夠將任意類型的數據,添加到緩衝區。接下來咱們能夠一塊兒看個案例:spa

 1 /*
 2 @author :yinzhengjie  3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com  5 */
 6 
 7 package cn.org.yinzhengjie.Demo;  8 
 9 public class StringBufferDemo { 10 
11     public static void main(String[] args) { 12  function(); 13  } 14     
15     public static void function() { 16         StringBuffer buffer = new StringBuffer(); 17         //調用StringBuffer方法append向緩衝區追加內容
18         buffer.append(6).append(false).append('A').append(3.14); 19  System.out.println(buffer); 20  } 21 } 22 
23 
24 
25 /*
26 以上代碼執行結果以下: 27 6falseA3.14 28 */

2>.delete方法線程

  刪除緩衝區字符,要注意的是裏面須要傳入2個值,delete(int start,int end),開始索引包含,結尾索引不包含。

 1 /*
 2 @author :yinzhengjie  3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com  5 */
 6 
 7 package cn.org.yinzhengjie.Demo;  8 
 9 public class StringBufferDemo { 10 
11     public static void main(String[] args) { 12  function(); 13  } 14     
15     public static void function() { 16         StringBuffer buffer = new StringBuffer(); 17         //調用StringBuffer方法append向緩衝區追加內容
18         buffer.append("yinzhengjie@2018"); 19         System.out.printf("buffer裏面的內容是:[%s]\n",buffer); 20         System.out.printf("長度是:[%d]\n",buffer.length()); 21         //刪除的起始位置是11,結束位置是16的索引下標
22         buffer.delete(11, 16); 23         System.out.printf("buffer裏面的內容是:[%s]\n",buffer); 24         //清空StringBuffer對象的全部內容
25         System.out.printf("長度是:[%d]\n",buffer.length()); 26         buffer.delete(0, buffer.length()); 27         System.out.printf("buffer裏面的內容是:[%s]\n",buffer); 28         System.out.printf("長度是:[%d]\n",buffer.length()); 29         
30         
31  } 32 } 33 
34 
35 
36 /*
37 以上代碼執行結果以下: 38 buffer裏面的內容是:[yinzhengjie@2018] 39 長度是:[16] 40 buffer裏面的內容是:[yinzhengjie] 41 長度是:[11] 42 buffer裏面的內容是:[] 43 長度是:[0] 44 */

3>.insert方法

 

  將任意數據類型,插入到緩衝區的指定索引上。

 1 /*
 2 @author :yinzhengjie  3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com  5 */
 6 
 7 package cn.org.yinzhengjie.Demo;  8 
 9 public class StringBufferDemo { 10 
11     public static void main(String[] args) { 12  function(); 13  } 14     
15     public static void function() { 16         StringBuffer buffer = new StringBuffer(); 17         //調用StringBuffer方法append向緩衝區追加內容
18         buffer.append("yinzhengjie@2018"); 19         System.out.printf("buffer裏面的內容是:[%s]\n",buffer); 20         System.out.printf("長度是:[%d]\n",buffer.length()); 21         buffer.insert(3, "尹"); 22         buffer.insert(9, "正"); 23         buffer.insert(13, "傑"); 24         System.out.printf("buffer裏面的內容是:[%s]\n",buffer); 25         System.out.printf("長度是:[%d]\n",buffer.length()); 26  } 27 } 28 
29 
30 
31 /*
32 以上代碼執行結果以下: 33 buffer裏面的內容是:[yinzhengjie@2018] 34 長度是:[16] 35 buffer裏面的內容是:[yin尹zheng正jie傑@2018] 36 長度是:[19] 37 */

4>.reverse() 將緩衝區中的字符反轉

  將緩衝區中的字符反轉。

 1 /*
 2 @author :yinzhengjie  3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com  5 */
 6 
 7 package cn.org.yinzhengjie.Demo;  8 
 9 public class StringBufferDemo { 10 
11     public static void main(String[] args) { 12  function(); 13  } 14     
15     public static void function() { 16         StringBuffer buffer = new StringBuffer(); 17         //調用StringBuffer方法append向緩衝區追加內容
18         buffer.append("yinzhengjie@2018"); 19         System.out.printf("buffer裏面的內容是:[%s]\n",buffer); 20         System.out.printf("長度是:[%d]\n",buffer.length()); 21  buffer.reverse(); 22         System.out.printf("buffer裏面的內容是:[%s]\n",buffer); 23         System.out.printf("長度是:[%d]\n",buffer.length()); 24  } 25 } 26 
27 
28 
29 /*
30 以上代碼執行結果以下: 31 buffer裏面的內容是:[yinzhengjie@2018] 32 長度是:[16] 33 buffer裏面的內容是:[8102@eijgnehzniy] 34 長度是:[16] 35 
36 */

 

5>.toSting()方法

  該方法是繼承Object,重寫toString(),將緩衝區中的全部字符,變成字符串。

 1 /*
 2 @author :yinzhengjie  3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com  5 */
 6 
 7 package cn.org.yinzhengjie.Demo;  8 
 9 public class StringBufferDemo { 10 
11     public static void main(String[] args) { 12  function(); 13  } 14     
15     public static void function() { 16         StringBuffer buffer = new StringBuffer(); 17         //調用StringBuffer方法append向緩衝區追加內容
18         buffer.append("yinzhengjie@2018"); 19         System.out.printf("buffer裏面的內容是:[%s]\n",buffer); 20         System.out.printf("長度是:[%d]\n",buffer.length()); 21         //將可變的字符串緩衝區對象,變成了不可變String對象。
22         String res = buffer.toString(); 23         System.out.printf("res裏面的內容是:[%s]\n",res); 24         System.out.printf("長度是:[%d]\n",buffer.length()); 25     
26  } 27 } 28 
29 
30 
31 /*
32 以上代碼執行結果以下: 33 buffer裏面的內容是:[yinzhengjie@2018] 34 長度是:[16] 35 res裏面的內容是:[yinzhengjie@2018] 36 長度是:[16] 37 */

 

二.StringBuilder類

  一個可變的字符序列。此類提供一個與 StringBuffer 兼容的 API,但不保證同步。該類被設計用做 StringBuffer 的一個簡易替換,用在字符串緩衝區被單個線程使用的時候(這種狀況很廣泛)。若是可能,建議優先採用該類,由於在大多數實現中,它比 StringBuffer 要快。 在後面咱們分享網絡編程的時候會給你們詳解,到時候你就會明白爲何線程越安全速度越慢,而StringBuilder是線程不安全的類。

  很顯然,StringBuilder的全部方法,在StringBuffer中都是存在的。由於他們是兼容的。

 

三.小試牛刀

1>.存在數組"int[] arr = {11,22,33,44,6,8,4};",請將該數組元素所有轉換成字符串,最終打印格式爲:"[11,22,33,44,6,8,4]".

 1 /*
 2 @author :yinzhengjie  3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com  5 */
 6 
 7 package cn.org.yinzhengjie.Demo;  8 
 9 public class StringBufferDemo { 10 
11     public static void main(String[] args) { 12         int[] arr = {11,22,33,44,6,8,4}; 13         StringBuffer res = function(arr); 14  System.out.println(res); 15  } 16     
17     public static StringBuffer function(int[] arr) { 18         StringBuffer buffer = new StringBuffer(); 19         buffer.append("["); 20         for (int i = 0; i < arr.length; i++) { 21             if(i==arr.length-1) { 22                 buffer.append(arr[i]).append("]"); 23             }else { 24                 buffer.append(arr[i]).append(","); 25  } 26  } 27         return buffer; 28  } 29 } 30 
31 
32 
33 /*
34 以上代碼執行結果以下: 35 buffer裏面的內容是:[yinzhengjie@2018] 36 長度是:[16] 37 res裏面的內容是:[yinzhengjie@2018] 38 長度是:[16] 39 */
本題的參考解法,本題的解法有不少種,答案不一致很正常,初學者實現效果就好!
相關文章
相關標籤/搜索