Stringbuffer的学习

news2024/11/17 17:41:04

1.构造方法

在这里插入图片描述
这里就看出String和Stringbuffer最主要的区别了
byte[]value不是final

// 1.空参创建   这里 默认初始长度出现了,16
	public StringBuffer() {
    super(16);
}
// 2.定容创建,如果知道使用长度其实还好,因为他会扩容
    public StringBuffer(int capacity) {
    super(capacity);
}
// 3.3和4其实一样,因为String是CharSequence的子类 4的话可以输入char数组
    public StringBuffer(String str) {
    super(str);
}
    public StringBuffer(CharSequence seq) {
    super(seq);
}

2.append

这里的apppend是将后面的字符串或者其他类型直接添加在后面。
源码太多,不做赘述

 public static void main(String[] args) {
        StringBuffer buffer = new StringBuffer("练习两年半");
        buffer.append("的");
        System.out.println("buffer = " + buffer);
        buffer.append("个人练习生");
        System.out.println("buffer = " + buffer);
    }

后面object也能传,说明对象也能传。
在这里插入图片描述
在这里插入图片描述

3.reverse(反转)

其实还是一个字符一个字符反转处理的 学习一下从中间向两边查找的方法
从中间向两边 j=(n-1)>>1

public synchronized StringBuffer reverse() {
    toStringCache = null;
    super.reverse();
    return this;
}
public AbstractStringBuilder reverse() {
    byte[] val = this.value;
    int count = this.count;
    int n = count - 1;
    if (isLatin1()) {
        for (int j = (n-1) >> 1; j >= 0; j--) {
            int k = n - j;
            byte cj = val[j];
            val[j] = val[k];
            val[k] = cj;
        }
    } else {
        StringUTF16.reverse(val, count);
    }
    return this;
}

16和阿拉伯处理方式的区别,还是字符的处理

 public static void reverse(byte[] val, int count) {
        checkOffset(count, val);
        int n = count - 1;// 总下标
        boolean hasSurrogates = false;
        for (int j = (n-1) >> 1; j >= 0; j--) {
        // 注意看这里,j = (n-1)/2  当字符串中字符个数位偶数时,n为基数,j以中间左边开始,count为奇数,n为偶数,这时候空掉中间的数了。
            int k = n - j;
            char cj = getChar(val, j);
            char ck = getChar(val, k);
            putChar(val, j, ck);
            putChar(val, k, cj);
            if (Character.isSurrogate(cj) ||
                Character.isSurrogate(ck)) {
                hasSurrogates = true;
            }
        }
        if (hasSurrogates) {
            reverseAllValidSurrogatePairs(val, count);
        }
    }

4.indexof 这里参数只能是字符串格式

这个调用的都是父类的方法,但是底层调用的还是字符串的方法。

  public int indexOf(String str) {
        // Note, synchronization achieved via invocations of other StringBuffer methods
        return super.indexOf(str);
    }

    /**
     * @since      1.4
     */
    @Override
    public synchronized int indexOf(String str, int fromIndex) {
        return super.indexOf(str, fromIndex);
    }

    /**
     * @since      1.4
     */
    @Override
    public int lastIndexOf(String str) {
        // Note, synchronization achieved via invocations of other StringBuffer methods
        return lastIndexOf(str, count);
    }

    /**
     * @since      1.4
     */
    @Override
    public synchronized int lastIndexOf(String str, int fromIndex) {
        return super.lastIndexOf(str, fromIndex);
    }

在这里插入图片描述

#### 5.到指定位置插入
public static void main(String[] args) {
        StringBuffer buffer = new StringBuffer("练习两年半");
        buffer.append("的");
        System.out.println("buffer = " + buffer);
//        buffer.append("个人练习生");
        System.out.println("buffer = " + buffer);
        buffer.insert(3,"坤坤");
        System.out.println("buffer = " + buffer);

    }

在这里插入图片描述
在这里插入图片描述

6.length方法 注意这里是获取字符串长度,而不是容器长度

@Override
public synchronized int length() {
    return count;
}

7.capacity 获取容器长度

关于扩容,晚点单独写

public synchronized int capacity() {
    return super.capacity();
}

8.替换指定位置字符串

// 起始位置, 替换进去的字符串
public synchronized StringBuffer replace(int start, int end, String str) {
    toStringCache = null;
    super.replace(start, end, str);
    return this;
}

在这里插入图片描述

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

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

相关文章

MySQL数据库——存储过程

MySQL数据库——存储过程 一、MySQL存储过程概念二、存储过程1.创建存储过程2.调用存储过程3.查看存储过程4.存储过程的参数5.删除存储过程 三、存储过程的控制语句1.条件语句if-then-else end if2.循环语句while end while 一、MySQL存储过程概念 存储过程是一组为了完成特定…

四、云尚办公-用户管理

云尚办公系统:用户管理 B站直达【为尚硅谷点赞】: https://www.bilibili.com/video/BV1Ya411S7aT 本博文以课程相关为主发布,并且融入了自己的一些看法以及对学习过程中遇见的问题给出相关的解决方法。一起学习一起进步!!&#x…

【2023,学点儿新Java-26】关键字介绍+示例代码:assert 断言(如何启用断言),以 验证一个数组的长度是否不为零 为例说明

前情回顾: 【2023,学点儿新Java-25】如何解决浮点计算存在误差:strictfp | 如何保护敏感信息,提高程序的可靠性和安全性:transient | 附:Java异常处理关键字介绍【2023,学点儿新Java-24】abstr…

yaffs文件系统测试

1.前面我制作好了文件系统烧到开发板运行后,出现了如下错误 2.网上查找后,有人说是因为 arm-linux-gnueabi-4.9xx版本太高,它的libc不支持arm9,于是我们换成arm-linux-gcc-4.3.2试试,arm-linux-gcc-4.3.2下载地址&…

【妙趣横生】用matplotlib绘制平均线,让你的数据可视化变得活灵活现!

大家好,今天我要跟你们分享一个超有趣的技巧——如何用matplotlib库绘制平均线,让你的数据可视化更加生动活泼! 第一步:获取数据 我们首先需要将Excel表中的数据读取进来,这样才能绘制出精彩的图表。咱们可以使用pand…

在Fligma打开Android Material 3 Design组件规格颜色大小等

打开Material 3 Design Kit 链接:链接: Material 3 Design Kit 打开后点击右上方Open in Figma(提前注册Figma账号) 点击左侧方菜单栏中的Componenets选项查看M3组件规格

【JavaWeb】统一响应,并渲染在网页

一、需求描述 获取数据,返回统一响应结果,再在页面渲染展示。 二、知识点 1、在前端代码emp.html中,在页面加载时,通过vue的mounted方法发起异步请求来加载数据,在成功回调函数中判定响应回来的code的值&#xff0c…

个人总结 - IP代理池的思考

前言 今天话有点多,连续发了几篇博客,主要平常忙的话就没时间关注博客这块,今天兴致在,就勤快点哈哈 一般公司除非有钱,他可以购买ip服务器,或者大量高质量ip,但是有的时候,公司经…

高压放大器如何驱动压电陶瓷片

高压放大器是一种常用于驱动压电陶瓷片的电路,其基本原理是利用高压放大电路将低电压信号放大到足以驱动压电陶瓷片所需的高电压信号。在本文中,我们将介绍高压放大器如何驱动压电陶瓷片的具体方法和步骤。 图:压电陶瓷片 一、驱动压电陶瓷片…

三种方法教你:Allegro文件导入SIwave仿真

导入仿真工具进行信号完整性(SI)仿真是PCB设计中的关键步骤之一,但很多小白可能不太清楚该如何导入,下面将聊聊如何通过Allegro软件导入SIWave仿真,希望对小伙伴们有所帮助。 01 使用SIwave的直接导入功能 SIwave提供…

PADS 出gerber 20230628

PADS出gerber 20230628 TOP BOTTOM Solder MASK TOP 阻焊层 绿油层,可以用来露焊盘的 Paste Mask TOP 钢网层 Paste Mask Bottom Silkscreen TOP 丝印层 Solder MASK Bottom Silkcreen Bottom TOP层 L1 注意:电气层L1 L2 L3 L4不能勾选文本…

三维3D扫描仪工艺品摆件仿制翻模雕塑三维数字化3D打印-CASAIM

三维扫描技术在工艺品摆件仿制、翻模、3D打印、三维数字化方面发挥着重要作用。通过三维扫描技术,能完整还原工艺品的真实原貌,为复制经典艺术品提供了更精确和更环保的方法,最终精确保存细节、完美进行复制,并为以后的3D打印、三…

二叉树及其遍历方式!

二叉树 什么是二叉树? 树中每个节点最多只能有两个子节点,在 JavaScript 中一般都是通过 Object 来模拟二叉树。 常用操作 前序遍历中序遍历后序遍历 前序遍历 根左右。 口诀: 访问根节点对根节点的左子树进行前序遍历对根节点的右子…

使用python实现一个快速高斯模糊算法

在gimp的retinex里面使用了一个快速计算的高斯模糊,论文应该是Recursive Implementation of the gaussian filter,是使用一些多项式计算来近似计算高斯分布,这样能够大大减少计算。 将retinex源码给抽离出来,并使用python进行实现…

线性表的定义和基本操作(以顺序表为例)

名人说:一花独放不是春,百花齐放花满园。——《增广贤文》 作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 〇、线性表是什么?1、定义2、特点3、基本操作 一、代码实现二、思路阐明…

统计图echarts和antd charts的那些事

以下记录的是,我在学习中的一些学习笔记,这篇笔记是自己学习的学习大杂烩,主要用于记录,方便查找,如需转载请著名原文作者和地址 一、echarts 相关 ##1、echarts 在react的使用 npm install echarts --save //初始化…

[web]前端富文本编辑器

关于富文本编辑器 在HTML中&#xff0c;用于输入文本的只是<input type"text"/>和<textarea>这2种标签&#xff0c;这些标签都只能输入纯文本&#xff0c;不可以对输入的内容进行编排&#xff01; 在实际应用时&#xff0c;例如发布文章&#xff0c;需要…

asdasdadsadsadsc

C中类和结构体的区别 类中默认权限是私有&#xff0c;结构体内默认权限是公有结构体的默认继承方式是public&#xff0c;类的默认继承方式是privat

uniapp的navigator页面跳转遇到的问题

文章目录 先看路由index组件login组件最后再从index转到login&#xff08;问题&#xff09; 先看路由 主页默认加载的index "pages": [ //pages数组中第一项表示应用启动页&#xff0c;参考&#xff1a;https://uniapp.dcloud.io/collocation/pages{"path"…

基于kubesphere的k8s环境部署三节点的rook-ceph集群

文章目录 前言链接&#xff1a;[基于kubesphere的k8s环境部署单点版本的rook-ceph](https://blog.csdn.net/baidu_35848778/article/details/131050918) 一、rook-ceph是什么&#xff1f;二、开始部署2.1 环境准备2.2 软件包准备&#xff0c;计算\存储节点执行2.3 下载rook-cep…