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 */
本题的参考解法,本题的解法有不少种,答案不一致很正常,初学者实现效果就好!
相关文章
相关标签/搜索