当前位置: 首页 > news >正文

如何修改字符串内容?

⭐ 作者:小胡_不糊涂
🌱 作者主页:小胡_不糊涂的个人主页
📀 收录专栏:浅谈Java
💖 持续更文,关注博主少走弯路,谢谢大家支持 💖

String

  • 1. 修改字符串
  • 2. StringBuilder和StringBuffer

在这里插入图片描述

1. 修改字符串

上一篇文章提到:String是一种不可变对象。

那么想要修改字符串中内容,该如何操作呢?

先看一段代码:

public static void main(String[] args) {String s = "hello";s += " world";System.out.println(s); // 输出:hello world
}

上述代码使用追加方式,来修改字符串s的内容,虽然可以成功修改,但这种方式不推荐使用,因为它的效率非常低,中间创建了好多临时对象:

在这里插入图片描述

由此可知在对String类进行修改时,效率是非常慢的,因此要尽量避免对String的直接需要,如果要修改,建议使用StringBuffer或者StringBuilder。

2. StringBuilder和StringBuffer

由于String的不可更改特性,为了方便字符串的修改,Java中又提供StringBuilder和StringBuffer类。这两个类大部分功能是相同的。

StringBuilder常用的一些方法:

方法功能
StringBuff append(Stringstr)在尾部追加,相当于String的+=,可以追加:boolean、char、char[]、double、float、int、long、Object、String、StringBuff的变量
char charAt(int index)获取index位置的字符
int length()获取字符串的长度
int capacity()获取底层保存字符串空间总的大小
void ensureCapacity(int mininmumCapacity)扩容
void setCharAt(int index,char ch)将index位置的字符设置为ch
int indexOf(String str)返回str第一次出现的位置
int indexOf(String str, int fromIndex)从fromIndex位置开始查找str第一次出现的位置
int lastIndexOf(String str)返回最后一次出现str的位置
int lastIndexOf(String str,int fromIndex)从fromIndex位置开始找str最后一次出现的位置
StringBuff insert(int offset, String str)在offset位置插入:八种基类类型 & String类型 & Object类型数据
StringBuffer deleteCharAt(int index)删除index位置字符
StringBuffer delete(int start, int end)删除[start, end)区间内的字符
StringBuffer replace(int start, int end, String str)将[start, end)位置的字符替换为str
String substring(int start)从start开始一直到末尾的字符以String的方式返回
String substring(int start,int end)将[start,end)范围内的字符以String的方式返回
StringBuffer reverse()反转字符串
String toString()将所有字符按照String的方式返回

使用实例:

public static void main(String[] args) {StringBuilder sb1 = new StringBuilder("hello");StringBuilder sb2 = sb1;// 追加:即尾插-->字符、字符串、整形数字sb1.append(' '); // hellosb1.append("world"); // hello worldsb1.append(123); // hello world123System.out.println(sb1); // hello world123System.out.println(sb1 == sb2); // trueSystem.out.println(sb1.charAt(0)); // 获取0号位上的字符 hSystem.out.println(sb1.length()); // 获取字符串的有效长度 14System.out.println(sb1.capacity()); // 获取底层数组的总大小 21sb1.setCharAt(0, 'H'); // 设置任意位置的字符 Hello world123sb1.insert(0, "Hello world!!!"); // Hello world!!!Hello world123System.out.println(sb1);//Hello world!!!Hello world123System.out.println(sb1.indexOf("Hello")); // 获取Hello第一次出现的位置 0System.out.println(sb1.lastIndexOf("hello")); // 获取hello最后一次出现的位置 -1sb1.deleteCharAt(0); // 删除首字符sb1.delete(0,5); // 删除[0, 5)范围内的字符String str = sb1.substring(0, 5); // 截取[0, 5)区间中的字符以String的方式返回System.out.println(str);//worldsb1.reverse(); // 字符串逆转str = sb1.toString(); // 将StringBuffer以String的方式返回System.out.println(str);//321dlrow olleH!!!dlrow}

从上述例子可以看出:String和StringBuilder最大的区别在于String的内容无法修改,而StringBuilder的内容可以修改。频繁修改字符串的情况考虑使用StringBuilder。

:String和StringBuilder类不能直接转换。如果要想互相转换,可以采用如下原则:

  • String变为StringBuilder:利用StringBuilder的构造方法或append()方法
  • StringBuilder变为String:调用toString()方法

String、StringBuffer、StringBuilder的区别:

  • String的内容不可修改,StringBuffer与StringBuilder的内容可以修改。
  • StringBuffer与StringBuilder大部分功能是相似的。
  • StringBuffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操作。

在这里插入图片描述

相关文章:

如何修改字符串内容?

⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:浅谈Java 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 String 1. 修改字符串2. StringBuilder和…...

pgadmin4中的备份与恢复

一,postgresql 数据的备份与恢复 (一)数据库备份与恢复 1,备份 windows环境 1> dump 逻辑备份 1,用管理员身份打开power shell 2,切换到本机 postgresql 安装目录下的 bin 目录: PS C…...

内网穿透——搭建私人影音媒体平台

文章目录 1. 前言2. Jellyfin服务网站搭建2.1. Jellyfin下载和安装2.2. Jellyfin网页测试 3.本地网页发布3.1 cpolar的安装和注册3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5. 结语 1. 前言 随着移动智能设备的普及,各种各样的使用需求也被开发出来&…...

使用psql操作PostgreSQL数据库

postgresql的操作和mysql差别较大。。 可以使用 psql 命令行工具或者其他的 PostgreSQL 客户端工具来查看表。如下是使用 psql 命令行工具查看表的方法: 连接到 PostgreSQL 数据库: 如果一个PostgreSQL的连接为 postgresql://用户名:密码127.0.0.1:5432/…...

什么是网络取证(Network Forensics)

企业采用新技术来检查其网络安全是否存在零日漏洞,与立即指示问题的物理层不同,黑客攻击尝试可能会被忽视并变得严重,直到对网络流量有一个整体的可见性。通过实时监控来跟踪其源和目标的流量,以查明问题或潜在问题的根源。 什么…...

农村农产品信息展示网站的设计与实现(论文+源码)_kaic

摘 要 随着软件技术的迅速发展,农产品信息展示的平台越来越多,传统的农产品显示方法将被计算机图形技术取代。这种网站技术主要把农产品的描述、农产品价格、农产品图片等内容,通过计算机网络的开发技术,在互联网上进行展示,然后通过计算机网…...

keepalived+lvs(DR)(四十六)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、作用 二、调度器配置 三、web节点配置 一、作用 使用keepalived解决lvs的单点故障 高可用集群 二、调度器配置 安装keepalived yum install -y k…...

从数据孤岛到企业xPA的演化

“数据孤岛”一直以来是企业在信息化进程中面临的比较头疼的问题,由于数据独立存在于不同部门之中,无法进行相互联动,致使数据库无法兼容,这无形中加大了跨部门合作的沟通成本。在此背景下,一种新兴的规划方法——扩展…...

视觉注意力收集

参考博文:神经网络学习小记录64——Pytorch 图像处理中注意力机制的解析与代码详解_pynq 注意力机制_Bubbliiiing的博客-CSDN博客 【计算机视觉】详解 自注意力:Non-local 模块与 Self-attention (视觉注意力机制 (一))_自注意力模块_何处闻韶的博客-CS…...

StableVideo:使用Stable Diffusion生成连续无闪烁的视频

使用Stable Diffusion生成视频一直是人们的研究目标,但是我们遇到的最大问题是视频帧和帧之间的闪烁,但是最新的论文则着力解决这个问题。 本文总结了Chai等人的论文《StableVideo: Text-driven consistency -aware Diffusion Video Editing》&#xff…...

「快学Docker」Docker容器安全性探析

「快学Docker」Docker容器安全性探析 引言容器安全性威胁Docker容器安全性目录容器镜像安全性主机与容器隔离访问控制运行时监控与防御网络安全性Docker容器安全性最佳实践 总结 引言 在当今快速发展的软件开发和部署领域,容器化技术已经成为一种不可或缺的工具。然…...

鲍威尔“放鹰”,美联储或将再加息?

KlipC报道:美联储主席鲍威尔8月25日举行的杰克逊霍尔全球央行年会上表示,尽管过去一年通胀总体持续下行,但住房和服务通胀仍处于高位,鲍威尔也表达了通胀上行风险的担忧,多次表示可能会在适当的情形进一步加息。演讲结…...

docker go安装库失败

在 Docker 容器中使用 Go 获取包时超时,可能是由于网络问题或者是由于特定的网络限制。以下是一些建议和解决方法: 更改下载源: Go 默认使用 proxy.golang.org 作为模块代理。在某些地区或网络环境中,这可能会导致超时。你可以尝试更改 Go 的…...

利用python进行键盘模拟输入

记一次利用python模拟键盘输入,由于键盘中英文切换较为麻烦,所以写了两个小程序分别进行英文字符模拟或中文字符模拟。 #用于键盘英文字符输入模拟 import pyautogui import timedef simulate_typing(text):# Give some time to switch to the desired …...

2024年java面试(二)--spring篇

文章目录 1.spring事务传播机制2.spring事务失效原因3.Bean的生命周期4.Bean作用域5.依赖注入三种方式(Ioc的三种实现方式)6.实例化bean的三种方式7.IOC容器初始化加载Bean流程 1.spring事务传播机制 声明式事务虽然优于编程式事务,但也有不…...

cyclictest stress 工具 使用

工具介绍 1. Cyclictest 准确且重复地测量线程的预期唤醒时间与它实际唤醒的时间之间的差异,以提供有关系统延迟的统计数据。 它可以测量由硬件、固件和操作系统引起的实时系统延迟 2.stress是Linux的一个压力测试工具,可以对CPU、Memory、IO、磁盘进行…...

天合翔宇荣获 HICOOL 2023 全球创业者大赛决赛二等奖

8 月 25 日晚,主题为“聚势创新 向光而行”的 HICOOL2023 全球创业者峰会开幕式,在中国国际展览中心(顺义馆)举行。北京市委书记尹力宣布开幕,市委副书记、市长殷勇致辞,市委副书记刘伟出席。 开幕式之后&…...

【LeetCode75】第三十五题 统计二叉树中好节点的数目

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 给我们一棵二叉树,让我们统计这棵二叉树中好节点的数目。 那么什么是好节点,题目中给出定义,从根节点…...

探究排序算法:比较与非比较排序算法及性能分析

探究排序算法:比较与非比较排序算法及性能分析 排序算法是计算机科学中的基本问题,它涉及将一组元素按照特定的顺序排列。本文将深入介绍比较排序算法和非比较排序算法,包括每个算法的原理、Java代码示例以及它们的性能分析和比较。 比较排…...

如何输出高质量软文,媒介盒子教你4大技巧

作为一名软文作者,只有知道软文写作的要求,才能打造一篇成功的软文,以便为企业或产品带来较高的关注度和曝光率,提高企业的知名度和品牌形象。下面就随小编一起来看看吧! 1、吸引眼球的标题 标题是软文写作的灵魂&am…...

Overture开源框架:快速部署生产级大语言模型API服务

1. 项目概述:一个开箱即用的开源AI应用框架最近在折腾AI应用开发的朋友,估计都绕不开一个核心问题:如何快速、稳定地把一个大语言模型(LLM)的能力,封装成一个能对外提供服务的API,并且这个服务还…...

鸣潮自动化工具ok-ww完整指南:3步实现智能后台挂机

鸣潮自动化工具ok-ww完整指南:3步实现智能后台挂机 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 你是否厌倦了在《鸣…...

Notion知识库与AI智能体无缝集成:基于MCP协议的easy-notion-mcp实战指南

1. 项目概述:当Notion遇上AI,一个工具如何打通你的知识库与智能体 如果你和我一样,既是Notion的重度用户,又热衷于折腾各种AI助手和智能体(Agent),那你肯定遇到过这个痛点:我那些精…...

yargs状态机:终极复杂命令流程管理指南

yargs状态机:终极复杂命令流程管理指南 【免费下载链接】yargs yargs the modern, pirate-themed successor to optimist. 项目地址: https://gitcode.com/gh_mirrors/ya/yargs 🚀 你是否曾为Node.js命令行工具的复杂参数解析而烦恼?…...

GUID partition table, GPT 磁盘分区表

GPT分割表 LBA0 (MBR 兼容区块) 与 MBR 模式相似的,这个兼容区块也分为两个部份,一个就是跟之前 446 bytes 相似的区块,存储了第一阶段的开机管理程式! 而在原本的分割表的纪录区内,这个兼容模式仅放入一个特殊标志的分割,用来表示此磁盘为 GPT 格式之意。而不懂 GPT 分割…...

EldenRingSaveCopier终极指南:轻松迁移艾尔登法环存档的完整解决方案

EldenRingSaveCopier终极指南:轻松迁移艾尔登法环存档的完整解决方案 【免费下载链接】EldenRingSaveCopier 项目地址: https://gitcode.com/gh_mirrors/el/EldenRingSaveCopier 你是否曾在艾尔登法环中投入数百小时,却因存档损坏或设备更换而面…...

Pearcleaner:为你的Mac带来彻底清理体验的免费开源工具

Pearcleaner:为你的Mac带来彻底清理体验的免费开源工具 【免费下载链接】Pearcleaner A free, source-available and fair-code licensed mac app cleaner 项目地址: https://gitcode.com/gh_mirrors/pe/Pearcleaner 你是否曾因Mac存储空间不足而感到困扰&am…...

【Midjourney Dirt印相终极指南】:从0到1复刻暗房胶片肌理,3步生成高质感复古影像

更多请点击: https://intelliparadigm.com 第一章:Midjourney Dirt印相的本质与历史溯源 Dirt印相(Dirt Photogram)并非Midjourney原生术语,而是社区对一类特定视觉风格的戏称——指在图像生成中刻意引入颗粒噪点、胶…...

opencode无网环境-引用上下文失效问题

问题 由于公司在内网环境开发,没有网络,安装了 opencode 后发现用 无法自动索引出项目文件,导致每次要指定项目文件的时候都得复制全路径。 环境 opencode1.3.6 原因 opencode 是用 ripgrep 扫描和索引文件系统的,启动 open…...

ARM调试工具AXD与armsd实战指南

1. ARM调试工具概述在嵌入式系统开发中,调试器是不可或缺的核心工具。ARM平台提供了两种主流的调试解决方案:AXD(ARM eXtended Debugger)和armsd(ARM Symbolic Debugger)。这两个工具构成了RealView开发套件…...