【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
相关推荐
吃好睡好便好5 小时前
说说口罩的佩戴
学习·生活·口罩
爱敲键盘的猴子5 小时前
Java Spring -- 声明式事务控制
java·spring·事务控制
爱编程的小新☆5 小时前
【LeetCode】从递归到 Flood Fill:5 道题吃透 DFS 的选择、回溯与标记
java·算法·leetcode·深度优先·回溯·flood fill
weixin_383196475 小时前
java基础面试题@Autowired和@Resource区别
java·开发语言
evans在进步5 小时前
LeetCode 33:搜索旋转排序数组——Java 两阶段二分查找详解
java·python·leetcode
fīɡЙtīиɡ ℡5 小时前
大模型结构化输出
人工智能·学习
疯狂打码的少年5 小时前
【数据结构】二叉树的性质(五大性质+计算)
数据结构·笔记·算法
Dave1205466 小时前
Day17:Agent Memory高级设计——短期记忆、长期记忆与向量语义记忆
人工智能·学习
Web Security Loop6 小时前
MAC卸载JDK环境
java·macos·jdk
小唔w6 小时前
2026年AI培训行业观察:主流学习渠道一览
人工智能·学习