⛳ StringBuffer and StringBuilder 处理字符串

目录

  • ⛳ StringBuffer and StringBuilder 处理字符串
    • 🎨 一,简介
    • 🏭 二,常用方法
    • 🚜 三 ,`StringBugger`
    • 🐾 四,`StringBuilder`
    • ⭐ 五,`StringBuffer`和`StringBuilder`面试

⛳ StringBuffer and StringBuilder 处理字符串

当我们处理字符序列是,经常需要进行字符串的拼接,替换,插入和删除等操作。Java提供了两个用于处理可变字符串的类:StringBufferStringBuilder。他们都是属于java.lang包,提供了一系列方法来修改字符串内容。

StringBufferStringBuilder的作用是相同的,都可以用于构建和修改字符串。他们的区别在于线程安全性和性能。

🎨 一,简介

  • append()insert()时,如果原来的value数组长度不够,可扩容。

    • 扩容原理:
        /*** For positive values of {@code minimumCapacity}, this method* behaves like {@code ensureCapacity}, however it is never* synchronized.* If {@code minimumCapacity} is non positive due to numeric* overflow, this method throws {@code OutOfMemoryError}.*/private void ensureCapacityInternal(int minimumCapacity) {// overflow-conscious codeif (minimumCapacity - value.length > 0) {value = Arrays.copyOf(value,newCapacity(minimumCapacity));}}
    
  • StringBufferStringBuilder中的方法支持方法链操作

    • 方法链原理:

          @Overridepublic StringBuilder append(String str) {super.append(str);return this;}
      // return this 返回对象本身
      

🏭 二,常用方法

StringBufferStringBuilder中的方法都是类似的。

在这里插入图片描述

  • StringBuffer append(xxx): 提供了很多的append()重载方法,用于进行字符串拼接。
  • StringBuffer delete(int start, int end):删除指定位置的内容。
  • StringBuffer replace(int start, int end, String str):把[start,end)位置替换成为str。
  • StringBuffer insert(int offset, xxx):在指定位置插入xxx。
  • StringBuffer reverse():把当前字符串序列逆转 。
  • public int indexOf(String str):返回指定字符串出现的索引。
  • public String substring(int start, int end):用于从字符串中提取子字符串的方法。它返回原始字符串中指定位置范围内的子字符串。
  • public int length():返回字符串的长度。
  • public char charAt(int n):返回指定索引的字符。
  • public void setCharAt(int n, char ch):设置指定索引处的字符。

🚜 三 ,StringBugger

StringBuffer是线程安全的,适合在多线程环境下使用。由于它的方法是同步的,保证了多个线程同时访问时的数据安全。然而,同步操作会带来一定的性能损失。因此,在单线程环境下,使用StringBuilder性能更好。

StringBuffer sb = new StringBuffer("Hello");
sb.append(" World");
sb.insert(5, ",");
sb.delete(3, 6);
sb.replace(6, 11, "Java");
System.out.println(sb.toString());  // 输出:Helo, Java

🐾 四,StringBuilder

StringBuilder是非线程安全的,适合在单线程环境下使用,由于没有同步操作,他的性能比StringBuffer更高。因此,在单线程环境下,推荐使用StringBuilder

StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
sb.insert(5, ",");
sb.delete(3, 6);
sb.replace(6, 11, "Java");
System.out.println(sb.toString());  // 输出:Helo, Java

⭐ 五,StringBufferStringBuilder面试

  • StringBufferStringBuilder非常类似,均代表可变的字符序列,而且提供相关的方法也一样。

  • 面试题:对比StringStringBufferStringBuilder

    1. String(JDK 1.0):是不可变字符序列 final value[]

      在这里插入图片描述

    2. StringBuffer(JDK 1.0):可变的字符序列、效率低、线程安全

      image-20230805113731074

    3. StringBuilder(JDK 5.0):可变字符序列、效率高、线程不安全

      image-20230805113856875

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

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

相关文章

2023牛客暑期多校训练营6 A-Tree (kruskal重构树))

文章目录 题目大意题解参考代码 题目大意 ( 0 ≤ a i ≤ 1 ) , ( 1 ≤ c o s t i ≤ 1 0 9 ) (0\leq a_i\leq 1),(1 \leq cost_i\leq 10^9) (0≤ai​≤1),(1≤costi​≤109) 题解 提供一种新的算法,kruskal重构树。 该算法重新构树,按边权排序每一条边…

分布式异步任务处理组件(七)

分布式异步任务处理组件底层网络通信模型的设计--如图: 使用Java原生NIO来实现TCP通信模型普通节点维护一个网络IO线程,负责和主节点的网络数据通信连接--这里的网络数据是指组件通信协议之下的直接面对字节流的数据读写,上层会有另一个线程负…

PoseiSwap:基于 Nautilus Chain ,构建全新价值体系

在 DeFi Summer 后,以太坊自身的弊端不断凸显,而以 Layer2 的方式为其扩容成为了行业很长一段时间的叙事方向之一。虽然以太坊已经顺利的从 PoW 的 1.0 迈向了 PoS 的 2.0 时代,但以太坊创始人 Vitalik Buterin 表示, Layer2 未来…

iOS-砸壳篇(两种砸壳方式)

CrackerXI砸壳呢,当时你要是使用 frida-ios-dump 也是可以的; https://github.com/AloneMonkey/frida-ios-dump frida-ios-dump: 代码中需要更改的:手机中的内网ip 密码 等 最后放到我的砸壳路径里: python dump.py -l查看应用…

SpringBoot自定义注解 + AOP+分布式Redis 防止重复提交

第一步 引入依赖pom.xml&#xff1a; <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.16.3</version> <!-- 使用最新版本 --></dependency><dependency><groupId&g…

单片机传感器类型一览

一、单片机&#xff1a; c51、attiny85 < arduino、stm8/stm32 < esp8266、esp32、raspiberry pico 功能简单型&#xff1a;C51、Attiny85等 功能可以较复杂型&#xff1a;Arduino < STM32 联网、人工智能等高级复杂型&#xff1a;esp8266 < esp32、pico …

docker-compose

文章目录 一、docker-compose简介二、docker-compose安装1.安装命令2.卸载旧版本3.修改权限4、常用命令 总结 一、docker-compose简介 示例&#xff1a;pandas 是基于NumPy 的一种工具&#xff0c;该工具是为了解决数据分析任务而创建的。 二、docker-compose安装 1.安装命令…

JMeter 4.x 简单使用

文章目录 前言JMeter 4.x 简单使用1. 启动2. 设置成中文3. 接口测试3.1. 设置线程组3.2. HTTP信息请求头管理器3.3. 添加HTTP请求默认值3.4. 添加HTTP cookie 管理3.5. 添加http请求3.5.1. 添加断言 3.6. 添加监听器-查看结果树3.7. 添加监听器-聚合报告 4. 测试 前言 如果您觉…

打开的idea项目maven不生效

方法一&#xff1a;CtrlshiftA&#xff08;或者help---->find action&#xff09;&#xff0c; 输入maven&#xff0c; 点击add maven projects&#xff0c;选择本项目中的pom.xml配置文件&#xff0c;等待加载........ 方法二&#xff1a;view->tools windows->mave…

【RabbitMQ(day4)】SpringBoot整合RabbitMQ与MQ应用场景说明

一、SpringBoot 中使用 RabbitMQ 导入对应的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>配置配置文件 spring:application:name: rabbitmq-springbo…

CSS3标题文本后的横线

示例代码 <template><div><h2 class"background">删除线</h2><h2 class"background"><span>左右两侧线</span></h2><h2 class"background double"><span>双层线</span></…

Python 扩展 快捷贴士:os模块下的创建目录的方式

Python3 os.makedirs() 方法 概述 os.makedirs() 方法用于递归创建多层目录。 如果子目录创建失败或者已经存在&#xff0c;会抛出一个 OSError 的异常&#xff0c;Windows上Error 183 即为目录已经存在的异常错误。 如果第一个参数 path 只有一级&#xff0c;即只创建一层目…

ADC前级的抗混叠滤波器(anti-alias filter设计

可以加我微信hezkz17申请加入数字音频系统研究开发交流答疑群(课题组) A/D前的抗混叠滤波器(anti-alias filter)设计方法? 作用, 抗混叠滤波器是在进行模数转换(A/D转换)之前,为了防止混叠现象而使用的滤波器。混叠是指当输入信号的频率超过采样率的一半时,在采样过程…

Android Glide MemorySizeCalculator计算值,Kotlin

Android Glide MemorySizeCalculator计算值,Kotlin for (i in 100..1000 step 50) {val calculator MemorySizeCalculator.Builder(this).setMemoryCacheScreens(i.toFloat()).setBitmapPoolScreens(i.toFloat()).setMaxSizeMultiplier(0.8f).setLowMemoryMaxSizeMultiplier(0…

后端登录安全的一种思路

PS:作者是小白能接触到的就只会这样写。勿喷。 前提 思路: 结合io流将登录token存储到配置文件中,不将token存储到浏览器端&#xff0c;从而避免盗取。 下面jwt的学习可以参考下这个: JWT --- 入门学习_本郡主是喵的博客-CSDN博客 JWT工具类 Component public class JWTtU…

用html+javascript打造公文一键排版系统12:删除附件说明中“附件:”里的空格

如果我们在输入附件说明时在“附件&#xff1a;”之间加入空格&#xff0c;那么排版时就要删除这些空格。 因为string对象replace()支持正则表达式&#xff0c;于是考虑用replace()来完成。 写了一段只有一个多余空格的代码来测试&#xff1a; <!DOCTYPE HTML> <HT…

【网络】网络层(IP协议)

目录 一、基本概念 二、协议头格式 三、网段划分 四、特殊的IP地址 五、IP地址的数量限制 六、私有IP地址和公网IP地址 七、路由 一、基本概念 IP协议&#xff1a;提供一种能力&#xff0c; 将数据从A主机送到B主机&#xff0c;&#xff08;TCP协议&#xff1a;确保IP协议…

QT 驱动条码打印机(没有验证过)

这里的打印机是条码打印机&#xff0c;因为第一次接触这种设备&#xff0c;所以买了斑马的GK888t型条码打印机&#xff0c;据说ZPL语言就是斑马的杰作想必支持会好点。实际是&#xff0c;除了ZPL本身外&#xff0c;没有SDK&#xff0c;也没有DDK&#xff0c;所以&#xff0c;一…

《OWASP代码审计》学习——注入漏洞审计

一、注入的概念 注入攻击允许恶意用户向应用程序添加或注入内容和命令&#xff0c;以修改其行为。这些类型的攻击是常见且广泛的&#xff0c;黑客很容易测试网站是否易受攻击&#xff0c;攻击者也很容易利用这些攻击。如今&#xff0c;它们在尚未更新的遗留应用程序中非常常见…

Webpack5新手入门简单配置

1.初始化项目 yarn init -y 2.安装依赖 yarn add -D webpack5.75.0 webpack-cli5.0.0 3.新建index.js 说明&#xff1a;写入下面的一句话 console.log("hello webpack"); 4.执行命令 说明&#xff1a;如果没有安装webpack脚手架就不能执行yarn webpack&#xff08…