zoukankan      html  css  js  c++  java
  • Java基础-StringBuffer类与StringBuilder类简介

                  Java基础-StringBuffer类与StringBuilder类简介

                                          作者:尹正杰

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

    一.StringBuffer类

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

      String在存储数据时,过于浪费内存,因此诞生了StringBuffer类,它是一个类似于 String 的字符串缓冲区,但不能修改。我们可以通过下图看出,若要新生成一个字符串“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.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]
    ",buffer);
    20         System.out.printf("长度是:[%d]
    ",buffer.length());
    21         //删除的起始位置是11,结束位置是16的索引下标
    22         buffer.delete(11, 16);
    23         System.out.printf("buffer里面的内容是:[%s]
    ",buffer);
    24         //清空StringBuffer对象的所有内容
    25         System.out.printf("长度是:[%d]
    ",buffer.length());
    26         buffer.delete(0, buffer.length());
    27         System.out.printf("buffer里面的内容是:[%s]
    ",buffer);
    28         System.out.printf("长度是:[%d]
    ",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]
    ",buffer);
    20         System.out.printf("长度是:[%d]
    ",buffer.length());
    21         buffer.insert(3, "尹");
    22         buffer.insert(9, "正");
    23         buffer.insert(13, "杰");
    24         System.out.printf("buffer里面的内容是:[%s]
    ",buffer);
    25         System.out.printf("长度是:[%d]
    ",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]
    ",buffer);
    20         System.out.printf("长度是:[%d]
    ",buffer.length());
    21         buffer.reverse();
    22         System.out.printf("buffer里面的内容是:[%s]
    ",buffer);
    23         System.out.printf("长度是:[%d]
    ",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]
    ",buffer);
    20         System.out.printf("长度是:[%d]
    ",buffer.length());
    21         //将可变的字符串缓冲区对象,变成了不可变String对象。
    22         String res = buffer.toString();
    23         System.out.printf("res里面的内容是:[%s]
    ",res);
    24         System.out.printf("长度是:[%d]
    ",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 */
    本题的参考解法,本题的解法有很多种,答案不一致很正常,初学者实现效果就好!
  • 相关阅读:
    (原).NET程序加入多语言包解决方案工具,超级棒
    c++标准库中的四个智能指针比较
    Mongodb c++ API的测试和封装
    MongoDB的c++驱动安装痛苦历程
    GLC_Player DOWNLOAD
    MongoDB的连接、创库、删库、插入文档、更新文档
    非关系型数据库--MongoDB的安装及概念
    虚拟机的安装
    OpenGL ES 学习
    QT学习
  • 原文地址:https://www.cnblogs.com/yinzhengjie/p/8850698.html
Copyright © 2011-2022 走看看