黑马程序员--05.String字符串类--04.【StringBuffer】【StringBuilder】

来源:互联网 发布:终结者2网络连接失败 编辑:程序博客网 时间:2024/05/17 07:58

String字符串相关类—4

      StringBuffer    StringBuilder

----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------

1.    StringBuffer类概述

1). StringBuffer类基本概念

(1). StringBuffer类的源码声明及含义

[1]. StringBuffer类声明

public final class StringBufferextends AbstractStringBuilder

implements java.io.Serializable, CharSequence

[2]. StringBuffer也是final修饰的类,所以StringBuffer不能被继承

[3]. StringBuffer类与String类的区别

{1}. 字符串常量一旦被初始化,值就不能改变

{2}. StringBuffer可以对里面的字符串进行修改,是字符串缓冲区

(2). 缓冲区

[1]. 缓冲区含义

可以向缓冲区中添加数据。使用的时候,可以用StringBuffer的toString方法查看缓冲区中的内容【因此StringBuffer重写了ObjecttoString()

[2]. 缓冲区的三个特点

{1}. 长度可变

       StringBuffer是一个容器,长度可以变化

{2}. 可以直接操作各种类型的数据

       StringBuffer可以直接操作各种类型的数据

但是数组只能操作一种类型的数据

{3}. 最终通过toString()方法变成字符串

(3). StringBuffer应用场景

满足以下三要素,就可以使用StringBuffer

【操作数据类型不确定

【操作数据的长度不确定

最终变成字符串

2). StringBuffer的常用方法

****StringBuffer知识点】StringBuffer是一个存放字符串的容器。

【记住一个规律】只要是容器,就能(CRUD)

(1). 增(也叫存储)

[1]. 将指定数据向StringBuffer的容器结尾追加元素

{1}. 函数原型:StringBufferappend(任意类型的参数)

{2}. append方法返回StringBuffer本身这个容器

StringBuffer这个容器里面的内容如何变化容器本身不变

【注意】

{1}.StringBuffer很多方法都返回StringBuffer对应的容器本身这是因为CRUD容器里面的数据,容器本身没有变

{2}.String的很多方法都返回String类型的字符常量不能被修改,所以,返回来的字符串并不是原来那个字符串本身,而是常量池中新的字符串的引用。

{3}. 举例比较两者的区别


【方法调用链】使用前提:方法每次返回的都是同一个对象

StringBuffer的连续append形式:

由于append返回的是容器本身,所以连续的append方法会一直向StringBuffer对应的容器添加数据。

e.g.

StringBuffer sb1= new StringBuffer();

//方法调用链,append每次返回的都是sb1这个容器

sb1.append("abc").append(true).append(34).append(23.4);

System.out.println(sb1);

打印结果:


[2].向StringBuffer的容器指定位置添加元素

{1}. 函数原型:StringBuffer insert(int offset, String str)//还有许多重写形式

{2}. insert方法返回StringBuffer本身这个容器

e.g. 向刚才的StringBuffer容器的'a'后面添加"qq"这个字符串

StringBuffer sb1= new StringBuffer();sb1.append("abc").append(true).append(34).append(23.4);System.out.println(sb1);sb1.insert(1, "qq");System.out.println(sb1);

打印结果:


(2). 删

[1]. 删除StringBuffer缓冲区中的指定区间数据

{1}. 函数原型:StringBufferdelete(int start,int end)

【注意】Java中操作两个端点的时候,含头不含尾

{2}. 删除完其中的数据之后,容器还是以前的容器。所以delete方法返回StringBuffer本身这个容器

{3}. 删除整个缓冲区中所有数据

调用delete(0,StringBuffer容器内容长度)

根据Java中操作两个端点的时候,含头不含尾的特点,第二个端点写成StringBuffer容器内容长度,实际上是删除0--->StringBuffer容器内容长度-1的内容。所以这条语句可以清空缓冲区。

举例:

StringBuffer sb1= new StringBuffer();sb1.append("abc").append(true).append(34).append(23.4);System.out.println(sb1);sb1.delete(0, sb1.length());System.out.println("清空之后:"+sb1);

打印结果


[2]. 删除StringBuffer缓冲区中的指定位置字符

{1}. 函数原型:StringBuffer deleteCharAt(int index)

{2}. deleteCharAt方法返回StringBuffer本身这个容器

{3}. deleteCharAt(int index)的原理

    实际上是采用了delete(index,index+1)这样的调用

(3). 改

[1]. 用新的字符串替换StringBuffer容器指定区间内容

{1}. 函数原型:StringBuffer replace(int start,int end, String str)

{2}. replace方法返回StringBuffer本身这个容器

{3}. Java中的两个端点,含头不含尾

[2]. 为StringBuffer中指定位置内容替换为新的字符串

{1}.函数原型:StringBuffer setCharAt(int index,charch)

{2}. setCharAt方法返回不是StringBuffer本身这个容器,而是void

[3]. 反转StringBuffer中的内容

{1}. 函数原型:StringBuffer reverse()

{2}. reverse方法返回StringBuffer本身这个容器

[4]. 转换StringBuffer中的内容到字符数组

{1}. 函数原型:void getChars(int srcBegin,int srcEnd,char dst[],int dstBegin)

{2}. Java中的两个端点,含头不含尾

(4). 查/获取

StringBuffer这个功能和String类相关的功能非常类似,这里仅仅给出简写即可】

char charAt(int index)      获取StringBuffer中的内容在指定位置的字符

int indexOf(int ch)         获取字符ch在StringBuffer中的内容的第一次出现的位置

int lastIndexOf(int ch)   获取字符ch在StringBuffer中的内容的最后一次出现的位置

int length()    获取StringBuffer中内容的长度

String subString(int beginIndex,int endIndex) 获取StringBuffer内容中的子串

【注意,获取功能返回的不是StringBuffer这个容器】

2.    StringBuilder

1). StringBuilder与StringBuffer

功能上和StringBuffer一致

[1]. StringBuilderStringBuffer的一个简易替换

API与StringBuffer一致,但是StringBuilder不保证线程同步

[2]. StringBuilder出现JDK5之后

{1}. StringBuilder线程不同步 ----->数据不安全----->效率高

{2}. StringBuffer线程同步 ----->数据安全----->效率低

【注意】多线程的时候,可以使用StringBuilder,可以自行加锁,保持同步

3.    JDK升级的三方面

(1). 提高安全性

(2). 提高效率

       StringBuffer的升级版StringBuilder就是为了提高效率而产生的

(3). 简化书写

----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------

 

原创粉丝点击