【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
相关推荐
pnoker22 分钟前
从工业软件到 AI 智能体:工业 AIoT 技术路线的系统梳理
java·人工智能·物联网·microsoft·开源·工业互联网
传奇开心果编程25 分钟前
【Rust入门知识点学与练】第5课:函数
开发语言·学习·rust
专注仿真31 分钟前
Vapor框架构建及Swift for TensorFlow图像分析
java·其他
逃逸线LOF31 分钟前
Spring的AOP简介
java·后端·spring
砚底藏山河37 分钟前
【量化纯GET实战 #21】用 pandas 做分析:把接口数据变成 DataFrame
java·python·金融·maven·pandas
知产xiao_xin39 分钟前
《伯尔尼公约》—— 版权保护期
经验分享·笔记·知识产权
指针常量42 分钟前
【RL相关笔记】RL 效率综述
人工智能·笔记·大语言模型·后训练
留白_1 小时前
【tableau入门学习】2、柱状图、折线图、饼图、散点图
学习·tableau
STQY燊桐启元(深圳)电子科技1 小时前
5G 射频光模块场景,ST‑XDP 微波吸波导热垫片应用优势,对比 DP 导热硅胶片
经验分享·笔记·5g
Zzzzmo_1 小时前
Spring MVC
java·spring·mvc·cookie/session