【Java学习笔记】SringBuffer类(重点)

StringBuffer(重点)

1. 基本介绍

(1)StringBuffer是可变的字符序列,可以对字符串内容惊醒增删

(2)很多方法喝String相同,但StringBuffer可变长度

(3)StringBuffer是一个容器

(4)StringBuffer是final类,不能被继承

2. 结构关系图

(1) StringBuffer 的直接父类是 AbstractStringBuilder

(2) StringBuffer 实现了 Serializable,即 StringBuffer 的对象可以串行化(即可以在网络中传输)

(3) 在父类中 AbstractStringBuilder 有属性 char[] value, 不是 final

(4)数组的起始大小是 16,如果大于 16 个字符长度,会自动扩容

(5) 该 value 数组存放字符串内容,引出存放在堆中的

(6) 因为 StringBuffer 字符内容是存在 char[] value, 所以在变化(增加/删除)时不用每次都更换地址(即不是每次创建新对象),所以效率高于 String


一、StringStringBuffer的相互转换

(1)String--->StringBuffer

方法一:创建StringBuffer对象,调用构造器

方法二:使用append方法

java 复制代码
String str = "jackson";

// 方法一
StringBuffer stringBuffer = new StringBuffer(str);

// 方法二
StringBuffer stringBuffer1 = new StringBuffer();
stringBuffer1 = stringBuffer1.append(str);

(2)StringBuffer--->String

方法一:创建String对象,调用构造器

方法二:调用StringBuffer的toString方法

java 复制代码
StringBuffer stringBuffer = new StringBuffer("jackson");

// 方法一
String str1 = stringBuffer.toString();

// 方法二
String str2 = new String(stringBuffer);

二、StringBuffer类的常用方法

方法介绍

增:append("字符串")

复制代码
### 在末尾添加
复制代码
### 可以连续调用

复制代码
### delete(索引 1,索引 2)

*

  ### 索引区间是左闭右开
复制代码
### deleteCharAt(int index)

改:repalce(索引 1,索引 2,字符串)

复制代码
### 索引区间是左闭右开

插:insert(索引,字符串)

翻转:reverse()

截取:substring(索引 1,索引 2)

复制代码
### 索引区间左闭右开

索引

复制代码
### indexOf("字符串"):第一次出现的索引
复制代码
### lastIndexOf("字符串"):最后依一次出现的索引

示例代码

java 复制代码
StringBuffer stringBuffer = new StringBuffer("hello~");

System.out.println("stringBuffer --> " + stringBuffer);

// append
stringBuffer.append("world");
System.out.println("append(\"world\") --> " + stringBuffer);

//delete
stringBuffer.delete(6,11);
System.out.println("delete(6,11) --> " + stringBuffer);

// deleteCharAt()
stringBuffer.deleteCharAt(5);
System.out.println("deleteCharAt(5) --> " + stringBuffer);

// insert()
stringBuffer.insert(5,"~world");
System.out.println("insert(5,\"~world\") --> " + stringBuffer);

// subString()
System.out.println("stringBuffer.substring(5,11) --> " + stringBuffer.substring(5,11));

// replace()
stringBuffer.replace(5,11,"");
System.out.println("replace(5,11,\"\") --> " + stringBuffer);

// indexOf()
System.out.println("indexOf(\"l\") --> " + stringBuffer.indexOf("l"));

// lastIndexOf()
System.out.println("lastIndexOf(\"l\") --> " + stringBuffer.lastIndexOf("l"));

// reverse()
System.out.println("reverse() --> " + stringBuffer.reverse());

输出结果

java 复制代码
stringBuffer --> hello~
append("world") --> hello~world
delete(6,11) --> hello~
deleteCharAt(5) --> hello
insert(5,"~world") --> hello~world
stringBuffer.substring(5,11) --> ~world
replace(5,11,"") --> hello
indexOf("l") --> 2
lastIndexOf("l") --> 3
reverse() --> olleh

三、小练习

题目:价格中小数点前的数字,每三位用逗号隔开

java 复制代码
String price = "8123564.59";
StringBuffer sb = new StringBuffer(price);

// 上面的两步需要做一个循环处理,才是正确的
for (int j = sb.lastIndexOf(".") - 3; j > 0; j -= 3) {
    sb = sb.insert(j, ",");
}

System.out.println(sb);  // 8,123,564.59
相关推荐
云泽8083 分钟前
C/C++内存管理详解:从基础原理到自定义内存池原理
java·c语言·c++
润 下6 分钟前
C语言——深入解析C语言指针:从基础到实践从入门到精通(四)
c语言·开发语言·人工智能·经验分享·笔记·程序人生·其他
koo36410 分钟前
李宏毅机器学习笔记25
人工智能·笔记·机器学习
Code小翊12 分钟前
堆的基础操作,C语言示例
java·数据结构·算法
m0_6786933320 分钟前
深度学习笔记39-CGAN|生成手势图像 | 可控制生成(Pytorch)
深度学习·学习·生成对抗网络
高山上有一只小老虎30 分钟前
idea中设置快捷键风格
java·ide·intellij-idea
JH307331 分钟前
IDEA自带的Maven安装位置
java·maven·intellij-idea
小年糕是糕手34 分钟前
【数据结构】双向链表“0”基础知识讲解 + 实战演练
c语言·开发语言·数据结构·c++·学习·算法·链表
将车24440 分钟前
C++实现二叉树搜索树
开发语言·数据结构·c++·笔记·学习
日更嵌入式的打工仔1 小时前
存储同步管理器SyncManager 归纳
笔记·单片机·嵌入式硬件