关于StringBuffer

数据分析面试八股文--技能软件类 数据分析的“三板斧"指的是三个在 Python 数据分析领域广泛使用的库:NumPy,Pandas,和 Matplotlib。这三个库提供了处理和分析数据的强大工具。NumPyNumPy(Numerical Python)是一个开源 Python 库,用于支持大型多维数组和矩阵运算。此外,NumPy 还提供了大量的数学函数来操作这些数组。np.array():创建数组np.arange():返回一个有终点和起点的固定步长的排列。 阅读详情

StringBuffer:线程安全的可变字符串。

StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuffer要更加合适一些。
在StringBuffer类中存在很多和String类一样的方法,这些方法在功能上和String类中的功能是完全一样的。
但是有一个最显著的区别在于,对于StringBuffer对象的每次修改都会改变对象自身,这点是和String类最大的区别。另外由于StringBuffer是线程安全的,所以在多线程程序中也可以很方便的进行使用,但是程序的执行效率相对来说就要慢一些。
上文引用链接:
http://www.cnblogs.com/springcsc/archive/2009/12/03/1616330.html

构造方法:
StringBuffer常用的构造方法:
public StringBuffer():无参构造方法
public StringBuffer(int capacity):指定容量的字符串缓冲区对象
public StringBuffer(String str):指定字符串内容的字符串缓冲区对象
StringBuffer的方法:
public int capacity():返回当前容量。 理论值(相当于瓶子容量)
public int length():返回长度(字符数)。 实际值(相当于瓶子里实际有多少水)
代码表现:

public class StringBufferDemo_01 {
    public static void main(String[] args) {
        StringBuffer sbf = new StringBuffer();
//      源码:
//      public StringBuffer() {
//          super(16);
//      }
        System.out.println("sbf:" + sbf);
        System.out.println("sbf.capacity():" + sbf.capacity());
        System.out.println("sbf.length():" + sbf.length());
        System.out.println("--------------------------");

        // public StringBuffer(int capacity):指定容量的字符串缓冲区对象
        StringBuffer sbf2 = new StringBuffer(50);
//      源码:
//      public StringBuffer(int capacity) {
//          super(capacity);
//      }
        System.out.println("sbf2:" + sbf2);
        System.out.println("sbf2.capacity():" + sbf2.capacity());
        System.out.println("sbf2.length():" + sbf2.length());
        System.out.println("--------------------------");

        // public StringBuffer(String str):指定字符串内容的字符串缓冲区对象
        StringBuffer sbf3 = new StringBuffer("hello");
//      源码:
//      public StringBuffer(String str) {
//          super(str.length() + 16);
//          append(str);
//      }
        System.out.println("sbf3:" + sbf3);
        System.out.println("sbf3.capacity():" + sbf3.capacity());
        System.out.println("sbf3.length():" + sbf3.length());
    }
}

输出:

sbf:
sbf.capacity():16
sbf.length():0
--------------------------
sbf2:
sbf2.capacity():50
sbf2.length():0
--------------------------
sbf3:hello
sbf3.capacity():21//16+5
sbf3.length():5

可见:
StringBuffer如同String一样样重写了toString()等方法;
在不同的构造方法中的capacity()方法返回值不一,默认16,在16的基础上变成指定容量或者在16的基础上增加相应长度。

StringBuffer的添加功能:
public StringBuffer append(String str):
可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
public StringBuffer insert(int offset,String str):
在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身

public class StringBufferDemo_02 {
    public static void main(String[] args) {
         StringBuffer sb = new StringBuffer();
         StringBuffer sb2 = sb.append("hello");
         System.out.println("sb:" + sb);
         System.out.println("sb2:" + sb2);
         System.out.println(sb == sb2); // true
     }
 }

这里就可以看出StringBuffer与String的区别,String一般会在改变字符串后生成新的字符串对象,而StringBuffer不会!所以sb==sb2返回true!

public class StringBufferDemo_02 {
    public static void main(String[] args) {
         StringBuffer sb = new StringBuffer();

        // 一步一步的添加数据
        // sb.append("hello");
        // sb.append(true);
        // sb.append(12);
        // sb.append(34.56);
        // 也可以链式编程:
        sb.append("hello").append(true).append(12).append(34.56);
        System.out.println("sb:" + sb);
        sb.insert(5, "world");
        System.out.println("sb:" + sb);
    }
}

输出:

sb:hellotrue1234.56
sb:helloworldtrue1234.56

StringBuffer的删除功能:
public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
public StringBuffer delete(int start,int end):删除从指定位置开始指定位置结束的内容,并返回本身
代码表现:

public class StringBufferDemo_03 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        sb.append("hello").append("world").append("java");
        System.out.println("sb:" + sb);
        sb.deleteCharAt(1);
        System.out.println("sb:" + sb);
        sb.delete(5, 10);//包左不包右
        System.out.println("sb:" + sb);
    }
}

输出:

sb:helloworldjava
sb:hlloworldjava
sb:hllowava

对于方法:public StringBuffer delete(int start,int end)
end可以大于length,效果与end=length一样,不会报错
参见源代码:

    public AbstractStringBuilder delete(int start, int end) {
        if (start < 0)
            throw new StringIndexOutOfBoundsException(start);
        if (end > count)
            end = count;//这里count==length
        if (start > end)
            throw new StringIndexOutOfBoundsException();
        int len = end - start;
        if (len > 0) {
            System.arraycopy(value, start+len, value, start, count-end);
            count -= len;
        }
        return this;
    }

StringBuffer的替换功能:
public StringBuffer replace(int start,int end,String str):从start开始到end用str替换

public class StringBufferDemo_04 {
    public static void main(String[] args) {

        StringBuffer sb = new StringBuffer();

        sb.append("hello");
        sb.append("world");
        sb.append("java");
        System.out.println("sb:" + sb);
        sb.replace(5, 10, "你好");
        System.out.println("sb:" + sb);
    }
}

输出:

sb:helloworldjava
sb:hello你好java

StringBuffer的反转功能:
public StringBuffer reverse()
代码实现:

public class StringBufferDemo_05 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        sb.append("eno2orez_avaj");
        System.out.println("sb:" + sb);
        sb.reverse();
        System.out.println("sb:" + sb);
    }
}

输出:

sb:eno2orez_avaj
sb:java_zero2one

StringBuffer的截取功能:
注意返回值类型不再是StringBuffer本身了,返回类型是String!
public String substring(int start)
public String substring(int start,int end)

代码实现:

public class StringBufferDemo_06 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        sb.append("hello").append("world").append("java");
        System.out.println("sb:" + sb);
        String s = sb.substring(5);
        System.out.println("s:" + s);
        System.out.println("sb:" + sb);
        String ss = sb.substring(5, 10);
        System.out.println("ss:" + ss);
        System.out.println("sb:" + sb);
    }
}

输出:

sb:helloworldjava
s:worldjava
sb:helloworldjava
ss:world
sb:helloworldjava

这里可以看出:StringBuffer对象sb一直没有改变!

油气井管柱力学发展 油气井管柱力学发展 1 石油管柱力学问题的发复杂性 1)油气管柱动力学的非线性 钻井中钻柱在重力、钻压、扭矩、钻井液浮力和井壁约束等作用下,产生三维变形。一方面随井眼轴线的弯曲而弯曲,这一变形被称为管柱的初位移;另一方面,管柱在运动过程中相对井眼轴线也有变形,这种变形被称为计算位移。管柱大变形主要表现在初位移部分,计算位移相对很小。大曲率井眼中管柱产生大挠度,但管柱很长且柔软性较好,变形一般仍保持... 阅读详情

相关推荐

ESP32开发环境避坑指南:用Thonny烧录MicroPython固件时常见的5个错误及解决方法

本文针对ESP32开发新手,详细解析了使用Thonny IDE烧录MicroPython固件时最常见的5个错误及其解决方案。内容涵盖驱动安装、端口识别、固件烧录失败、版本兼容性、连接不稳定以及文件系统操作异常等核心痛点,并提供硬件层面的深度排查指南,帮助开发者高效搭建稳定的ESP32开发环境。

weixin_29189003的博客 408

Java中StringBuffer的替换功能(replace)!

/* StringBuffer的替换功能: public StringBuffer replace(int start,int end,String str):从start开始到end,用str替换 */ public class StringBufferDemo { public static void main(String[] args) { //创建字符串缓冲区对象 Str...

不会下雨的云的博客 2万+

告别TwinCAT:手把手教你用IgH EtherCAT Master在LinuxCNC上搭建实时运动控制平台

本文详细介绍了如何利用IgH EtherCAT Master和LinuxCNC搭建开源实时运动控制平台,替代商业软件TwinCAT。通过分步指南,包括实时Linux环境配置、EtherCAT主站安装、LinuxCNC集成及多轴同步控制实现,帮助开发者构建高性能、低成本的工业自动化解决方案。

weixin_42641741的博客 401

Java StringBuffer 字符串替换函数 replace

StringBuffer replace(int start, int end, String str) 在这个序列的一个子字符串的字符来替换指定的字符串中的字符。 子字符串的开始在指定的开始,并延伸到索引end - 1,或如果不存在这样的字符序列的结束处的字符 StringBuilder str = new StringBuilder("Java Util Package"); Sys

橙煦媛的博客 1万+

基于Opencv+Mediapipe的头部姿态检测

在学生课堂专注度检测项目中,可以通过学生头部姿态来确定学生注意力方向,从而判断其是否专注于课堂。

weixin_67879842的博客 2339

腾讯面试——机器学习岗面试总结

先写合并两个有序数组,接着写合并n个有序的数组,假设总共m个数,讲了一个思路两两合并直到只剩下一个数组,分析一下时间复杂度(MlogN),面试官不满意,然后想了一下说了另一个思路,用n个指针开始指向各个数组的首端,用一个优先队列维护他们的最小值,每次拿出最小值的指针然后插入该指针的下一个值。感觉跟二面面试官聊得还是挺开心的,他详细地介绍了他们部门所做的业务,然后问了一下什么时候能来实现,我说只能暑假七八两个月,他觉得有点晚,这样子不利于转正,有些人都实习半年的,回去讨论一下,正式批之前给我答复。

FPGA/MATLAB学习教程/源码/项目合作开发 1232

StringBuffer详解

我们学习StringBuffer 之前先查一下一些定义,先做个简单的了解 可以看出,StringBuffer的功能确实是很强大哦 那么我们怎么创建StringBuffer呢?又怎么赋值呢? StringBuffer类的构造方法 public StringBuffer() 构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。 public StringBuffer(int cap...

黄文孝同学的博客 4万+

基于学术研究于NASA官网GPM卫星数据下载详细教程

基于学术研究于NASA官网GPM卫星数据下载详细教程

珞瑜的博客 8657

StringBuffer

StringBuffer 1. 概述 StringBuffer:字符串变量(Synchronized,即线程安全)。如果要频繁对字符串内容进行修改,出于效率考虑最好使用 StringBuffer,如果想转成 String 类型,可以调用 StringBuffer 的 toString() 方法。 Java.lang.StringBuffer 线程安全的可变字符序列。在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。可将字符串缓冲区安全地用于多个线程。 StringBuf

m0_50804764的博客 1万+

【图像识别】基于计算机视觉实现红绿灯识别matlab代码

​ 1 简介 现如今,盲人出行依旧是一大问题.面对无处不在的红绿灯,盲人无法通过眼睛辨识红绿灯的状态,出行受阻.为了解决盲人识别红绿灯的难题,本文提出了一种基于MATLAB进行红绿灯识别的系统.对交通灯的识别主要基于对交通灯的色彩及形状特征.基于信号灯的亮度对其进行分割,提取,并设置了一种自动最优选择阈值的方法.再由HIS彩色空间的H信息识别颜色.最后根据二值化的交通灯的横坐标和纵坐标方向的投影进行形状匹配识别. 2 部分代码 clc clear all close all a=imread('m

qq_59747472的博客 2691

Cesium 实现气象(温度,降水,风速)可视化详细代码实现

本教程介绍了使用Cesium实现气象数据可视化的方法,主要包括:1) 搭建Cesium开发环境;2) 三种核心气象要素的展示技术:温度热力图(基于颜色渐变和点密度)、降水区域填充(矩形着色)和风速风向(粒子系统);3) 数据集成方案,包括模拟数据生成和API对接;4) 高级功能如3D温度柱和时间序列动画;5) 性能优化策略,如数据聚合和LOD控制。教程提供了完整的代码示例,从基础配置到视觉效果实现,帮助开发者构建交互式气象可视化应用。

专注AI大模型,软件混淆,授权 1857

StringBuffer与stringBuilder

String是不可变的,而StringBuffer和StringBuilder是可变类。StringBuffer是线程安全和同步的,而StringBuilder不是。这就是StringBuilder比StringBuffer快的原因。字符串连接运算符(+)在内部使用StringBuilder类。对于非多线程环境中的字符串操作,我们应该使用StringBuilder否则使用StringBuffer类。...

lvxinyan 7667

安路TangDynasty和FD和JTAG驱动器安装

安路FPGA产品矩阵包含SALPHOENIX高性能、SALEAGLE高性价比和SALELF低功耗三大系列,广泛应用于网络通信、消费电子等领域。配套的TangDynasty(TD)集成开发环境支持标准设计输入,提供完整优化流程与调试工具。简要介绍了TD 6.2.1版本的安装步骤。

wangjie36的博客 1040

StringBuffer 详解

1、线程安全:不安全,存在同步操作同一数据的行为,效率高。安全的时候,没有同步操作,效率低。2、StringBuffer是一个可变序列。3、StringBuffer又被称为字符缓冲区,把它当成一个字符串去操作,只不过它与string相比是可以修改内容的。4、在任何时间点,它包含着一些特定的字符序列,但是可以通过某些字符序列的长度和内容。1、StringBuffer的内容和长度都是可以改变的,String却不可以。2、String创建每一个字符串都会在开辟一个新的空间。

HUAIJIUdada的博客 1380

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

stringBuffer详解

stringBuffer与string stringBuffer简介 :StringBuffer是一个字符的缓冲区,如果需要频繁的对字符串进行拼接时,建议使用StringBuffe。 工作原理: StringBuffer的底层是一个char类型的数组,如果没有明确设定,则系统会自动创建一个长度为16的char类型数组,在使用数组的时候,如果长度不够了,则会通过拷贝对数组进行扩容,所以使用StringBuffe时最好预测并且手动进行初始化长度,这样能够减少数组的拷贝,从而提高效率。 StringBuff

qq_45872399的博客 4125

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

String、StringBuilder、StringBuffer

String、StringBuilder、StringBuffer

pig_ning的博客 592

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

StringBuffer的赋值

StringBuffer类 StringBuffer类和 String类一样,也用来代表字符串,只是由于 StringBuffer的内部实现方式和 String不同, StringBuffer在进行字符串处理时,不生成新的对象,所以在内存使用上, StringBuffer类要优于 String类。 StringBuffer类中存在很多和 String类一样的方法,这些方法在功能上是完全一样的。St...

qq_43470705的博客 3779

[C++] StringBuffer类的实现

白忙了标准的string效率就很nice,,原想C++可能也有java种类似的问题, sign 杯具。。 还是贴一下代码吧,,虽然很拙劣,自己写一个复习了C++的一些支持 1.操作符重载 2.const类型的重载,即const类型的形参 只能调用const类型的函数。 3.操作符重载中 类成员和非类成员的问题。 代码 /*** stringBufferclasswhic...

weixin_30892889的博客 2912

StringBuffer的用法讲解

本篇博客参考:StringBuffer的用法,java之StringBuffer常见使用方法解析 如有侵权,请告之,删之 一、StringBuffer作用 StringBuffer 当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且...

REfusing的博客 3727

StringBuffer类

StringBuffer

蔡林浩的博客 626

StringBuffer和StringBuilder

StringBuffer和StringBuilder

nefelibataazk的博客 1348

StringBuffer报错解决

StringBuffer报错解决 2020-09-02 String和StringBuffer 做项目遇到了StringBuffer报Exception in thread “main” java.lang.NullPointerException错误, 查资料发现原来StringBuffer需要实例化后使用,记录一下。 以下内容收集自网络,有部分修改。 StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBu.

Zmc_RUSHB的博客 2651

StringBuffer添加换行

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34209406的博客 9597

StringBuffer的用法

1. StringBuffer对象的初始化 StringBuffer s = new StringBuffer(); 这样初始化出的StringBuffer对象是一个空的对象,就是我犯的错误。 如果需要创建带有内容的StringBuffer对象,则可以使用: StringBuffer s = new StringBuffer(“abc”); 这样初始化出的StringBuffer对象的内容就是字符串”abc”。 String s = “abc”; StringBuffer sb1 = new StringB

刘珂的博客 990
上一篇: 详谈String类
下一篇: 用StringBuffer与String解决同一个问题
詹詹自喜KING
博客等级 码龄11年 40粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值