博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java基础-StringBuffer类与StringBuilder类简介
阅读量:5912 次
发布时间:2019-06-19

本文共 6657 字,大约阅读时间需要 22 分钟。

              Java基础-StringBuffer类与StringBuilder类简介

                                      作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

 

 

 

 

一.StringBuffer类

  在学习过String类之后,我们发现该类功能甚是强大。查看过API的小伙伴应该知道字符串缓冲区支持可变的字符串,说你是字符串缓冲区呢?接下来我们来研究一下字符串缓冲区。

  String在存储数据时,过于浪费内存,因此诞生了StringBuffer类,它是一个类似于 的字符串缓冲区,但不能修改。我们可以通过下图看出,若要新生成一个字符串“res”时,需要在堆内存中创建出"yinzhengjie"和"M19"的内存对象,而最终有用的只有最后审查的字符串“yinzhengjieM19”有用,也就是res变量。而我们如果创建了StringBuffer对象之后,会明显发现存储之前的字符串始终只用了一块内存空间,当内存的值未满时,就会一直填充,而创建的对象也就始终只有它一个(一个StringBuffer默认字符缓冲区是16个字符)。

 二.StringBuffer类常用的方法

1>.append方法

 

  通过查阅相关API说明文档,可以说是StringBuffer对象的append方法可以将任意类型的数据,添加到缓冲区。接下来我们可以一起看个案例:

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.1428 */

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 */
本题的参考解法,本题的解法有很多种,答案不一致很正常,初学者实现效果就好!

 

你可能感兴趣的文章
序列化有关内容
查看>>
Jmeter变量参数化及函数应用
查看>>
代码整洁之道-第9章-单元测试-读书笔记
查看>>
195. Spring Boot 2.0数据库迁移:Flyway
查看>>
集成支付宝SDK时错误的解决办法
查看>>
C++ ssd5 12 optional exercise2
查看>>
如何调用带返回值类型的函数
查看>>
数据库设计,表与表的关系,一对一。One-To-One(1)
查看>>
Building QT projects from the command line
查看>>
微信小程序直播,腾讯云直播+微信小程序实现实时直播
查看>>
JSP
查看>>
新工作
查看>>
Educational Codeforces Round 24-A B C D 思维
查看>>
[中国企业报]小灵通“末路”
查看>>
女士流行春装,时尚女装,韩版女士春装
查看>>
BZOJ5289 & 洛谷4437:[HNOI/AHOI2018]排列——题解
查看>>
Django的模板系统
查看>>
【总结整理】关于二手交易平台的讨论
查看>>
移动APP安全测试
查看>>
流程(上)
查看>>