Java基础-StringBuffer类与StringBuilder类简介

              Java基础-StringBuffer类与StringBuilder类简介

                                      作者:尹正杰

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

一.StringBuffer类

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

Java基础-StringBuffer类与StringBuilder类简介

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

Java基础-StringBuffer类与StringBuilder类简介

 二.StringBuffer类常用的方法

1>.append方法

Java基础-StringBuffer类与StringBuilder类简介

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

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.Demo; public class StringBufferDemo { public static void main(String[] args) {
function();
} public static void function() {
StringBuffer buffer = new StringBuffer();
//调用StringBuffer方法append向缓冲区追加内容
buffer.append(6).append(false).append('A').append(3.14);
System.out.println(buffer);
}
} /*
以上代码执行结果如下:
6falseA3.14
*/

2>.delete方法

Java基础-StringBuffer类与StringBuilder类简介

  删除缓冲区字符,要注意的是里面需要传入2个值,delete(int start,int end),开始索引包含,结尾索引不包含。

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.Demo; public class StringBufferDemo { public static void main(String[] args) {
function();
} public static void function() {
StringBuffer buffer = new StringBuffer();
//调用StringBuffer方法append向缓冲区追加内容
buffer.append("yinzhengjie@2018");
System.out.printf("buffer里面的内容是:[%s]\n",buffer);
System.out.printf("长度是:[%d]\n",buffer.length());
//删除的起始位置是11,结束位置是16的索引下标
buffer.delete(11, 16);
System.out.printf("buffer里面的内容是:[%s]\n",buffer);
//清空StringBuffer对象的所有内容
System.out.printf("长度是:[%d]\n",buffer.length());
buffer.delete(0, buffer.length());
System.out.printf("buffer里面的内容是:[%s]\n",buffer);
System.out.printf("长度是:[%d]\n",buffer.length()); }
} /*
以上代码执行结果如下:
buffer里面的内容是:[yinzhengjie@2018]
长度是:[16]
buffer里面的内容是:[yinzhengjie]
长度是:[11]
buffer里面的内容是:[]
长度是:[0]
*/

3>.insert方法

Java基础-StringBuffer类与StringBuilder类简介

  将任意数据类型,插入到缓冲区的指定索引上。

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.Demo; public class StringBufferDemo { public static void main(String[] args) {
function();
} public static void function() {
StringBuffer buffer = new StringBuffer();
//调用StringBuffer方法append向缓冲区追加内容
buffer.append("yinzhengjie@2018");
System.out.printf("buffer里面的内容是:[%s]\n",buffer);
System.out.printf("长度是:[%d]\n",buffer.length());
buffer.insert(3, "尹");
buffer.insert(9, "正");
buffer.insert(13, "杰");
System.out.printf("buffer里面的内容是:[%s]\n",buffer);
System.out.printf("长度是:[%d]\n",buffer.length());
}
} /*
以上代码执行结果如下:
buffer里面的内容是:[yinzhengjie@2018]
长度是:[16]
buffer里面的内容是:[yin尹zheng正jie杰@2018]
长度是:[19]
*/

4>.reverse() 将缓冲区中的字符反转

  将缓冲区中的字符反转。

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.Demo; public class StringBufferDemo { public static void main(String[] args) {
function();
} public static void function() {
StringBuffer buffer = new StringBuffer();
//调用StringBuffer方法append向缓冲区追加内容
buffer.append("yinzhengjie@2018");
System.out.printf("buffer里面的内容是:[%s]\n",buffer);
System.out.printf("长度是:[%d]\n",buffer.length());
buffer.reverse();
System.out.printf("buffer里面的内容是:[%s]\n",buffer);
System.out.printf("长度是:[%d]\n",buffer.length());
}
} /*
以上代码执行结果如下:
buffer里面的内容是:[yinzhengjie@2018]
长度是:[16]
buffer里面的内容是:[8102@eijgnehzniy]
长度是:[16] */

5>.toSting()方法

  该方法是继承Object,重写toString(),将缓冲区中的所有字符,变成字符串。

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.Demo; public class StringBufferDemo { public static void main(String[] args) {
function();
} public static void function() {
StringBuffer buffer = new StringBuffer();
//调用StringBuffer方法append向缓冲区追加内容
buffer.append("yinzhengjie@2018");
System.out.printf("buffer里面的内容是:[%s]\n",buffer);
System.out.printf("长度是:[%d]\n",buffer.length());
//将可变的字符串缓冲区对象,变成了不可变String对象。
String res = buffer.toString();
System.out.printf("res里面的内容是:[%s]\n",res);
System.out.printf("长度是:[%d]\n",buffer.length()); }
} /*
以上代码执行结果如下:
buffer里面的内容是:[yinzhengjie@2018]
长度是:[16]
res里面的内容是:[yinzhengjie@2018]
长度是:[16]
*/

二.StringBuilder类

  一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。 在后面我们分享网络编程的时候会给大家详解,到时候你就会明白为什么线程越安全速度越慢,而StringBuilder是线程不安全的类。

Java基础-StringBuffer类与StringBuilder类简介

  很显然,StringBuilder的所有方法,在StringBuffer中都是存在的。因为他们是兼容的。

三.小试牛刀

1>.存在数组"int[] arr = {11,22,33,44,6,8,4};",请将该数组元素全部转换成字符串,最终打印格式为:"[11,22,33,44,6,8,4]".

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.Demo; public class StringBufferDemo { public static void main(String[] args) {
int[] arr = {11,22,33,44,6,8,4};
StringBuffer res = function(arr);
System.out.println(res);
} public static StringBuffer function(int[] arr) {
StringBuffer buffer = new StringBuffer();
buffer.append("[");
for (int i = 0; i < arr.length; i++) {
if(i==arr.length-1) {
buffer.append(arr[i]).append("]");
}else {
buffer.append(arr[i]).append(",");
}
}
return buffer;
}
} /*
以上代码执行结果如下:
buffer里面的内容是:[yinzhengjie@2018]
长度是:[16]
res里面的内容是:[yinzhengjie@2018]
长度是:[16]
*/

本题的参考解法,本题的解法有很多种,答案不一致很正常,初学者实现效果就好!

上一篇:【JVM】linux上tomcat中部署的web服务,时好时坏,莫名其妙宕机,报错:There is insufficient memory for the Java Runtime Environment to continue.


下一篇:python基础(常用内容)