StringBuffer类

news2025/1/11 21:57:57

StringBuffer基本介绍

  1. StringBuff代表可变的字符串,可以对字符串内容进行增删
  2. 很多方法与String相同,但StringBuff是可变长度的
  3. StringBuff是一个容器

了解StringBuffer

StringBuffer的继承关系:
在这里插入图片描述
可以看到StringBuffer继承AbstractStringBuilder类。

  1. StringBuffer的直接父类是AbstractStringBuilder
  2. StringBuffer实现了Serializable接口,使它的对象可以串行化
  3. 在AbstractStringBuilder父类中有属性char[] value,与String不同他不是final修饰的。所以这个属性是指向堆的,不是跟String一样指向常量池的
  4. StringBuffer是一个final类,不能杯继承
  5. 因为StringBuffer字符串是存在char[] value堆中的,所以所有的变化(增加/删除),不用跟String一样每次都要变换地址和创建新对象,所以效率上高于String

StringBuffer和String的区别

首先最大的区别是保存字符串的空间不一样:
String:private final char [] valur;//指向常量池
StringBuffer:private char [] valur;//指向堆

那么这两者有什么区别呢?通过前面的String类的学习,了解到String类的字符串每当要改变内容时会直接在常量池中寻找有没有,有就直接改变地址指向新内容。如果没有就创建新内容然后指向它。不管那种方式都是会改变指向地址的

而StringBuffer因为不是final修饰所以,就是一个普通的char数组。而数组是保存在堆中的,属于引用类型,可以随意更改在堆中的内容,且地址不会变。除非数组空间满了需要扩容才会更换地址。

示意图演示:

String字符串更改内容

String s1 = new String("123")
s1 = "567";

在这里插入图片描述

StringBuffer更改内容

StringBuffer s1 = new StringBuffer("abc")
s1 = "bbc";

在这里插入图片描述

StringBuffer的构造器

  1. StringBuffer():无参构造器,使初始value数组空间容量为16个字符
  2. StringBuffer(CharSequence seq):构造一个字符串缓冲区,它包含与指定CharSequence 相同的字符
  3. StringBuffer(int capacity):传入一个int类型,定义value数组的空间容量
  4. StringBuffer(String str):直接传入一个String类型,保存到value数组,且在这个基础上再+16的字符空间容量

StringBuffer与String的互相转换

String转StringBuffer
第一种:使用构造器,直接传入

String s1 = "qqq";
StringBuffer s2 = new StringBuffer(s1);

第二种:使用StringBuff的append方法

String s1 = "qqq";
StringBuffer s2 = new StringBuffer();
s2 = s2.append(s1);

StringBuffer转String
第一种:使用StringBuffer的toString方法

StringBuffer s1 = "qqq";
String s2 = new String();
s2 = s1.toString();

第二种:使用构造器直接传入

StringBuffer s1 = "qqq";
String s2 = new String(s1);

StringBuffer的常用方法

  1. append:在字符串后增加内容
  2. delete(start,end):删除下标start到下标end前的内容
  3. replace(start,end,string):将下标start到下标end前的内容替换成string
  4. indexOf:查找子串第一次出现的下标
  5. insert(int,string):在下标int前插入string新内容,原内容后移
  6. length:字符串长度

StringBuffer练习题

1.输出什么?为什么

String str =null;
StringBuffer sb = new StringBuffer();
sb.append(str);
System.out.println(sb.length());
System.out.println(sb);
StringBUffer sb2 = new StringBuffer(str);
System.out.println(sb2);

运行:
1.首先输出长度,此时sb是null,调用append,底层最后会使用一个父类的appendNull的方法,把null变成’n’u’l’l’4个字.符存入value,所以长度是4
2.然后输出sb sb是null
3.将str通过构造器传入sb2,而StringBuffer传入string类型的构造器,需要先获取这个string的长度,但是此时str是null所以会报空指针异常:NullPointerException

2.编程题
要求实现输入的数字小数点开始,往前梅隔3位数,就插入一个逗号“,”
比如:123445.22 变成 123,445.22

思路分析:
1.获取输入的数字,转成StringBuffer类型
2.根据小数点,使用lastIndexOf方法找出小数点的下标
3.根据小数点的小标以3为界使用insert方法插入“,”

public class test1 {
    public static void main(String[] args) {
       String num = "2234323423423424567.23";
       StringBuffer sb = new StringBuffer(num);
        for (int i = sb.lastIndexOf(".")-3; i > 0; i-=3) {
            sb.insert(i,",");
        }
        System.out.println(sb);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/76405.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计网实验】思科CiscoPacketTracer仿真实验

本文参考B站up主:湖科大教书匠 软件版本:Cisco Packet Tracer 6.1.1sv ❓ 实验01的内容较为简单,所以不写了~ 🌹 因作者水平有限,若有遗漏、错误等地方,请大佬批评指正 实验02:访问Web服务器 实…

设计必备,5个png免抠素材网站,建议收藏

做设计、PPT都需要用到大量的免抠素材,职场中熟练使用Photoshop的人毕竟是少数,也很少有人愿意花费时间去精细抠图。那这5个免抠素材网站一定要收藏好,可以有效帮你节省时间,提高工作效率。1、菜鸟图库 https://www.sucai999.com/…

计算机毕业设计php+vue基于微信小程序的员工宿舍报修系统

项目介绍 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代,员工宿舍报修系统就是信息时代变革中的产物之一。 任何系统都要遵循系…

进程被杀Task被移除

现象 Kill查杀 Task被移除 当Task处于前台&Task中唯一的activity不处于onStop(可能处于onResume/onPause等)状态时,当前进程被kill查杀,当前activity会被finish导致task中因无activity而被移除。 12-08 15:20:54.991 18018…

Windows11去掉桌面快捷方式箭头

有部分强迫症用户,看到桌面每个图标都有一个小箭头,只想去掉看着舒服一点 但是Win10的大部分脚本都不能使用了,而且有可能导致桌面图标显示异常,不建议大家再去用脚本尝试(Win11也有脚本,但是随便更新版本&#xff0c…

深入理解Kafka Producer内部机制

总的来说,Kafka Producer是将数据发送到kafka集群的客户端。其组成部分如下图所示: 基本组件: Producer Metadata——管理生产者所需的元数据:集群中的主题和分区、充当分区领导者的代理节点等。Partitioner——计算给定记录的分…

Pygame入门-游戏代码结构及背景轮播、声音音效及图像动态效果

一、游戏代码结构 代码结构是代码的组织方式,也是游戏编程的思考框架。pygame官方文档中给出了以下建议,将游戏代码结构分为以下六个部分。 1导入游戏模块。 2资源处理类;定义一些类来处理最基本的资源,包括加载图像和声音,连接和…

C#(csharp)这门语言的优势在哪?

确实有不少人因为unity入坑C#,unity刚开始使用的语言也有很多,比如Unity(一种Java的扩展)或者Boo(一种受Python启发的语言),但C#坚持至今甚至成为unity使用主流,C#当然有它的优点。 …

实测 ChatGPT 编程效果被其发现,这波我先站队 Stack Overflow

本文对 ChatGPT 解答编程问题的情况进行了测试。测试了不同难度的问题,并对 ChatGPT 的回答结果进行了鉴别。测试结果表明,ChatGPT 在解答简单的编程问题时表现较为出色,但在解决复杂的问题时则不太理想。因此,也总结出了如何更好…

Vulnhub靶机:SICKOS_ 1.1

目录介绍信息收集主机信息探测主机信息探测网站探测Getshell敏感信息收集SUDO提权第2种通关思路nikto扫描站点验证破壳漏洞破壳漏洞利用计划任务提权修复文件内容错乱 & 提权总结介绍 系列:SickOs(此系列共2台) 发布日期:201…

springboot+netty实现站内消息通知(完整代码)

代码用到的组件介绍 ChannelInitializer 见名知意,就是channel 初始化器,当每个客户端创建连接时这里面的代码都会执行一遍。由于,连接建立之后,这个channel就会常驻内存,所以这里就有个值得思考的问题: …

【vue核心】1.vue简介

1. 官网 英文官网: https://vuejs.org/ 中文官网: https://cn.vuejs.org/ 2. 介绍与描述 动态构建用户界面的渐进式 JavaScript 框架 作者: 尤雨溪 3. Vue 的特点 遵循 MVVM 模式 编码简洁, 体积小, 运行效率高, 适合移动/PC 端开发 它本身只关注UI, 也可以引入其它第三…

新冠疫苗预约小程序设计与实现的源码+文档

摘 要 网络的广泛应用给生活带来了十分的便利。所以把新冠疫苗预约管理与现在网络相结合,利用java技术建设新冠疫苗预约小程序,实现新冠疫苗预约的信息化。则对于进一步提高新冠疫苗预约管理发展,丰富新冠疫苗预约管理经验能起到不少的促进…

数据库挖矿系列-优化器设计探索穿越之旅

作者:王晨 阿里云数据库产品团队 前言 引用来自百度百科的话:在数据库技术发展历史上,1970 年是发生伟大转折的一年,因为这一年的6月,IBM的圣约瑟研究实验室的高级研究员Edgar Frank Codd在Communications of ACM 上…

微信中使用ChatGPT

ChatGPT 微信 Bot1. Ubuntu2. 卸载旧版本3. apt 安装4. 添加软件源的GPG密钥5. 添加docker源到sources.list6. 安装 docker7. 启动 docker8. 建立docker用户组9. 测试10. wechat-chatgpt 搭建11. 获取 会话令牌12. 运行13. 使用微信小号扫码登录14. 重新登录14.1 停止运行容器1…

【Python项目】Python实现点选验证码识别, 模拟B站登陆 | 附源码 学习资料

前言 halo,包子们下午好 今天小编带大家是想b站模拟登陆,Python实现验证码识别 废话不多说,直接开整 相关文件 关注小编,私信小编领取哟! 当然别忘了一件三连哟~~ 公众号:Python日志 源码点击蓝色字体领…

Docker Desktop下部署springboot项目

一、前言 本文是基于windows10版本下的docker desktop来演示的,所以你需要自行安装docker desktop,可以是windows,也可以是mac,根据自己的电脑进行选择即可。 二、创建springboot项目 创建一个springboot web项目,这个比较简单&#xff0c…

Vector-常用CAN工具 - CANoe入门到精通_04

前面已经介绍了Network Node节点的创建和配置,我想大家如果仔细研究下这块基本没什么问题,但是针对相应的CAPL编程该如何去做呢?今天这篇文章就是我们专门介绍在Network Node节点中常用的一些操作函数和使用技巧。 五、 Network Node相关CAPL…

如何在 Canvas 上实现图形拾取?

大家好,我是前端西瓜哥,今天来和大家说说 canvas 怎么做图形拾取。 图形拾取,指的是用户通过鼠标或手指在图形界面上能选中图形的能力。图形拾取技术是之后的高亮图形、拖拽图形、点击触发事件的基础。 canvas 作为一个过于朴实无华的绘制工…

【软件测试】老板:你测试,我放心。测试人的成功就是不做测试?

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 测试没价值&#xf…