【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
相关推荐
JIngJaneIL25 分钟前
基于springboot + vue古城景区管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
敲敲了个代码32 分钟前
隐式类型转换:哈基米 == 猫 ? true :false
开发语言·前端·javascript·学习·面试·web
专注VB编程开发20年1 小时前
C#全面超越JAVA,主要还是跨平台用的人少
java·c#·.net·跨平台
南_山无梅落1 小时前
9.Python3集合(set)增删改查和推导式
java·开发语言
爱笑的眼睛111 小时前
超越MSE与交叉熵:深度解析损失函数的动态本质与高阶设计
java·人工智能·python·ai
Pandora_4171 小时前
cursor学习
学习
全靠bug跑2 小时前
Spring Cloud OpenFeign 实战三部曲:快速集成 · 连接池优化 · 客户端抽取
java·spring boot·openfeign
zhdy567892 小时前
最简单方法 设置matlab坐标轴刻度标签的字号,设置坐标轴标题和图形标题,并指定字号。画出的图片背景设置为白色,
笔记
Evan芙2 小时前
搭建nexus服务,实现本地仓库、代理仓库
java·nginx·tomcat