/*
         * StringBuffer:就是字符串缓冲区,线程安全。
         * 用于存储数据的容器。
         * 特点:
         * 1,长度的可变的。
         * 2,可以存储不同类型数据。
         * 3,最终要转成字符串进行使用。
         * 4,可以对字符串进行修改。
         *
         * 构造方法:
         * StringBuffer() :构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。
           StringBuffer(int capacity):  构造一个不带字符,但具有指定初始容量的字符串缓冲区。     
         * 效率:
         *      如果事先知道要往容器中放多少字符,则使用第二中效率更高,因为虽然此容器室可变的,但是内部使用可变数组
         *  ,每次增长数组的长度,需要浪费时间,因为每次需要重新创建一个长度为原来数组两倍的新数组,
         *  而且还要复制原来数组的元素,需要一定的时间。
         *  看源码发现:StringBuffer 父类AbstractStringBuilder的方法:需要执行以下方法往容器里面填充:
         *  
         *   void expandCapacity(int minimumCapacity) {
                int newCapacity = (value.length + 1) * 2;//原来数组的两倍多
                if (newCapacity < 0) {
                    newCapacity = Integer.MAX_VALUE;
                } else if (minimumCapacity > newCapacity) {
                    newCapacity = minimumCapacity;
                }
                    value = Arrays.copyOf(value, newCapacity);//把原来数组的值复制到新数组当中,value代表原始数组,代表新数组的长度
            }
         *             
         *
         * 既然是一个容器对象。应该具备什么功能呢?
         * 1,添加:不同类型的数据
         *         StringBuffer append(data);
         *         StringBuffer insert(index,data);//在某个位置进行插入
         * 2,删除:
         *         StringBuffer delete(start,end):包含头,不包含尾。
         *         StringBuffer deleteCharAt(int index):删除指定位置的元素
         * 3,查找:
         *         char charAt(index);//查找元素
         *         int indexOf(string);//查找位置(第一次出现)
         *         int lastIndexOf(string);//查找位置(最后一次出现)
         * 4,修改:
         *         StringBuffer replace(start,end,string);//替换子字符串中的字符,使用给定字符串
         *         void setCharAt(index,char);//使用一个字符,替换指定位置上的字符
         *
         * 增删改查  C(create)U(update)R(read)D(delete)
         *
         * 特殊方法:
         * 5。设置字符串的长度public void setLength(int newLength) newLength 参数必须大于或等于 0。
         *      如果 newLength 参数小于当前长度,则长度将更改为指定的长度。
                 如果 newLength 参数大于或等于当前长度,则将追加有效的 null 字符 ('\u0000'),使长度满足 newLength 参数。
              
            看源码发现:value代表原始数组。
            public void setLength(int newLength) {
                if (newLength < 0)
                    throw new StringIndexOutOfBoundsException(newLength);
                if (newLength > value.length)
                    expandCapacity(newLength);
            
                if (count < newLength) {
                    for (; count < newLength; count++)
                    value[count] = '\0';
                } else {
                        count = newLength;
                }
          }
         */

public class StringBufferDemo {

    /**
* @param args
*/
public static void main(String[] args) { bufferMethodDemo_2();
} private static void bufferMethodDemo_2() {
StringBuffer sb = new StringBuffer("abce"); //删除
sb.delete(1, 3);//ae
sb.delete(0,sb.length());//清空缓冲区。
//sb = new StringBuffer(); sb.append("abced");
sb.replace(1, 3, "nba");//包含头,不包含尾部,替换,1,2位置:b和c
System.out.println("repalce***********"+sb.toString());//输出repalce***********anbaed
sb.setCharAt(2, 'q');//输出
System.out.println("setCharAt******:"+sb);//输出setCharAt******:anqaed
sb.setLength(10);//设置字符序列的长度
System.out.println("sb:"+sb);
System.out.println("len:"+sb.length());
System.out.println(""+sb.reverse().toString());//输出deaqna } private static void bufferMethodDemo_1() {
StringBuffer sb = new StringBuffer("abce");
// sb.append("xixi");
sb.insert(2, "qq");//在c的位置进行插入,c向后顺延,输出abqqce
System.out.println(sb.toString());
} public static void bufferMethodDemo(){
//创建缓冲区对象。
StringBuffer sb = new StringBuffer();
sb.append(4).append(false);//.append("haha");
sb.insert(1, "haha");
// sb.append(true);
System.out.println(sb); }
}
 

java基础知识回顾之---java StringBuffer类的更多相关文章

  1. java基础知识回顾之---java String final类普通方法

    辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /*     * 按照面向对象的思想对字符串进行功能分类.     *      ...

  2. Java基础知识强化36:StringBuffer类之StringBuffer的概述

    1. StringBuffer类概述: (1)String的缺陷: 我们如果对字符串进行拼接操作,每次拼接,都会构造一个新的String对象,既耗时,又浪费空间.如下图: (2)StringBuffe ...

  3. java基础知识回顾之java集合类-Properties集合

    /** java.lang.Object   |--java.util.Dictionary<K,V>      |--java.util.Hashtable<Object,Obje ...

  4. Java基础知识强化43:StringBuffer类之StringBuffer和String的相互转化

    1. String和StringBuffer的相互转换 思想是:A-----B的转换,我们把A转换为B,其实是为了使用B的功能:B-----A的转换,我们可能的结果是A类型,所以还要转换回来 2. 案 ...

  5. java基础知识回顾之java Thread类学习(八)--java.util.concurrent.locks(JDK1.5)与synchronized异同讲解

    看API文档介绍几个方法:  JDK1.5中提供了多线程的升级解决方案: 特点: 1.将同步synchronized显示的替换成Lock                    2.接口Conditio ...

  6. java基础知识回顾之java Thread类学习(八)--java多线程通信等待唤醒机制经典应用(生产者消费者)

     *java多线程--等待唤醒机制:经典的体现"生产者和消费者模型 *对于此模型,应该明确以下几点: *1.生产者仅仅在仓库未满的时候生产,仓库满了则停止生产. *2.消费者仅仅在有产品的时 ...

  7. java基础知识回顾之java Thread类学习(三)--java线程实现常见的两种方式实现好处:

    总结:实现Runnable接口比继承Thread类更有优势: 1.因为java只能单继承,实现Runnable接口可以避免单继承的局限性 2.继承Thread类,多个线程不能处理或者共享同一个资源,但 ...

  8. java基础知识回顾之---java String final类 容易混淆的java String常量池内存分析

    /** *   栈(Stack) :存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放  在常量池中). 堆(heap):存 ...

  9. Java基础知识强化47:StringBuffer类之StringBuffer的三个面试题

    1. 面试题:String,StringBuffer,StringBuilder的区别 ? 答:String是字符串内容不可变的,而StringBuffer和StringBuilder是字符串内容长度 ...

随机推荐

  1. mplayer-for-windows change color scheme in win 7

    Q: When I play movie on Windows7, always comes this message: The color scheme has been changed The f ...

  2. CustomMessageBox使用总结

    开发过程中难免要使用到消息框,然而系统提供的MessageBox却难以满足许多需求.一.MessageBox的背景颜色无法更改,这就无法满足需求要求的消息框颜色.二.MessageBox的提示形式过于 ...

  3. Css调整字体间距

    在span div 某些元素中有时候会用到调整字体的间距,设置方法: letter-spacing:15px;  

  4. 数列平方根的和 java

    题目描述: 数列的定义如下:数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和. 输入 输入数据有多组,每组占一行,由两个整数n(n<10000)和m(m<1000)组成,n和 ...

  5. 关于getpw系列函数返回的静态区域

    首先说一下什么是getpw系列函数,它主要是指这些函数: 这些函数根据一个用户名(getpwnam和getpwnam_r两个函数)或者一个用户ID(getpwuid和getpwuid_r)来获取这个用 ...

  6. 合并大量txt文件的内容

    首先熟悉一个dos命令 显示文件内容命令——type命令 1.格式:type [盘符:] [路径] 文件名 2.类型:内部命令 3.功能:把指定的文件内容在屏幕上显示或打印机输出,它常用作查阅和显示文 ...

  7. 百度编辑器(Ueditor)最新版(1.4.3.3)插入锚点失败原因分析及BUG修复

    用百度编辑器——Ueditor(版本1.4.3.3,2016-05-18日上线)插入锚点的时候,每次总是失败,百思不得其解.通过分析Ueditor的代码ueditor.all.js,可以看出Uedit ...

  8. Hadoop 的部署适用性(网上资料http://www.linuxidc.com/Linux/2013-10/92141.htm)

    近些年,Hadoop和“走向大数据分析引擎”一样,受到颇多赞誉.对很多人来说,Hadoop就意味着大数据技术.但其实开源的分布式处理框架未必能解决所有的大数据问题.这就要求想要部署Hadoop的公司慎 ...

  9. Mysql多表查询(两张独立表,一张关系表)

    一.数据库设计 1.三个数据表长这样   其中user表记录用户信息,cat主要记录男女性别,mete表是用户id和性别id的对应关系   2.具体数据如下   二.查询目标 查询出所有性别为“男”的 ...

  10. NaN 和 Infinity

    using Fasterflect; using System; using System.Collections.Generic; using System.Linq; using System.R ...