c# —— StringBuilder 类

StringBuilder 类是 C# 和其他一些基于 .NET Framework 的编程语言中的一个类,它位于 System.Text 命名空间下。StringBuilder 类表示一个可变的字符序列,它是为了提供一种比直接使用字符串连接操作更加高效的方式来构建或修改字符串。

与 C# 中的 string 类型不同,string 是不可变的,这意味着每次对字符串进行修改(如拼接、替换字符等)时,都会创建一个新的字符串对象。这种不可变性在处理大量字符串操作时可能会导致性能问题,因为每次修改都会涉及内存分配和可能的垃圾回收。

StringBuilder 类通过提供一个可变的字符序列来解决这个问题。你可以使用 StringBuilder 类的方法来高效地添加、插入、删除或替换字符,而不需要创建新的字符串对象。这使得 StringBuilder 类在处理大量字符串拼接或修改操作时比直接使用 string 类型更加高效。

StringBuilder 类的主要方法和属性包括:

Append:在当前 StringBuilder 对象的末尾追加指定的字符串或字符。
Insert:在指定位置插入一个字符串或字符。
Remove:移除指定范围内的字符。
Replace:替换指定子字符串的第一次出现。
Length:获取或设置 StringBuilder 对象中字符的总数。
Capacity:获取或设置可以包含在 StringBuilder 中的最大字符数。
ToString:将此实例的当前值转换为一个不可变的 string 对象。
使用 StringBuilder 类时,你可以通过指定初始容量来优化性能。如果知道将要构建的字符串的大致大小,设置合适的容量可以减少内存分配的次数,从而提高性能。然而,需要注意的是,如果设置的容量小于实际需要,StringBuilder 会自动增加容量以适应更多字符,这可能会导致额外的内存分配。如果设置的容量远大于实际需要,则会浪费内存。

总之,StringBuilder 类是处理大量字符串拼接或修改操作时的首选工具,因为它提供了比直接使用 string 类型更加高效的方法。

例子1:循环内字符串连接

在循环中拼接字符串时,使用 StringBuilder 可以避免创建大量临时字符串,从而提高性能。

StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < 10000; i++)
{stringBuilder.Append("Item");stringBuilder.Append(i);
}
string result = stringBuilder.ToString();

在这个例子中,我们创建了一个 StringBuilder 对象,并在循环中使用 Append 方法将字符串拼接起来。最后,使用 ToString 方法将 StringBuilder 对象转换为不可变的 string 对象。 

例子2:构建大型日志消息

当需要构建大型日志消息时,可以使用 StringBuilder 来高效地拼接字符串。

StringBuilder logBuilder = new StringBuilder();
foreach (var dataItem in data)
{logBuilder.Append(dataItem.ToString());logBuilder.Append(",");
}
string logMessage = logBuilder.ToString().TrimEnd(',');

在这个例子中,我们遍历一个数据集合,并使用 Append 方法将每个数据项转换为字符串并拼接到 StringBuilder 对象中。最后,使用 ToString 方法将 StringBuilder 对象转换为字符串,并使用 TrimEnd 方法去除末尾的逗号。

例子3:格式化长字符串

StringBuilder 还支持格式化字符串,可以使用 AppendFormat 方法将格式化的字符串追加到 StringBuilder 对象中。

StringBuilder reportBuilder = new StringBuilder();
foreach (var item in reportData)
{reportBuilder.AppendFormat("ID: {0}, Name: {1}, Value: {2}\n", item.Id, item.Name, item.Value);
}
string report = reportBuilder.ToString();

在这个例子中,我们遍历一个报告数据集合,并使用 AppendFormat 方法将每个数据项的 ID、名称和值格式化为字符串并追加到 StringBuilder 对象中。最后,使用 ToString 方法将 StringBuilder 对象转换为字符串。

例子4:SQL 查询构造

在构建 SQL 查询时,可以使用 StringBuilder 来动态地拼接查询条件。

StringBuilder sqlQuery = new StringBuilder("SELECT * FROM Users WHERE ");
bool isFirst = true;
foreach (var condition in conditions)
{if (!isFirst){sqlQuery.Append(" AND ");}sqlQuery.Append($"Column = '{condition}'");isFirst = false;
}
ExecuteSql(sqlQuery.ToString());

在这个例子中,我们使用 StringBuilder 来构建 SQL 查询语句,并根据条件集合动态地拼接查询条件。最后,使用 ToString 方法将 StringBuilder 对象转换为 SQL 查询字符串,并传递给 ExecuteSql 方法执行。

例子5:处理用户输入流

当需要处理用户输入流时,可以使用 StringBuilder 来高效地拼接输入字符。

StringBuilder inputBuffer = new StringBuilder();
while (streamReader.Peek() >= 0)
{inputBuffer.Append((char)streamReader.Read());
}
ProcessInput(inputBuffer.ToString());

在这个例子中,我们使用 StringBuilder 来拼接用户输入流中的字符。在循环中,我们使用 Append 方法将读取的字符追加到 StringBuilder 对象中。最后,使用 ToString 方法将 StringBuilder 对象转换为字符串,并传递给 ProcessInput 方法处理。

这些例子展示了 StringBuilder 在不同场景下的应用,通过使用 StringBuilder,我们可以更加高效地处理字符串拼接和修改操作。

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

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

相关文章

基于AVue的二次封装:快速构建后台管理系统的CRUD方案

基于AVue的二次封装&#xff1a;快速构建后台管理系统的CRUD方案 在开发后台管理系统时&#xff0c;表格是常见的组件之一。然而&#xff0c;使用原生的Element Plus实现CRUD&#xff08;增删改查&#xff09;功能往往需要编写大量重复代码&#xff0c;过程繁琐。即使借助类似…

Spring全局异常处理

在项目开发中&#xff0c;异常是经常遇到的&#xff0c;但是如何更高效的处理好异常信息&#xff0c;让我们能快速定位到BUG&#xff0c;是很重要的&#xff0c;不仅能够提高我们的开发效率&#xff0c;还能让你代码看上去更舒服&#xff0c;SpringBoot的项目已经对有一定的异常…

华为昇腾服务器(固件版本查询、驱动版本查询、CANN版本查询)

文章目录 1. **查看固件和驱动版本**2. **查看CANN版本**3. **其他辅助方法**注意事项 在华为昇腾服务器上查看固件、驱动和CANN版本的常用方法如下&#xff1a; 1. 查看固件和驱动版本 通过命令行工具 npu-smi 执行以下命令查看当前设备的固件&#xff08;Firmware&#xff0…

pikachu靶场搭建教程

需要的东西 phpStudy&#xff1a; 链接&#xff1a; https://pan.baidu.com/s/1fJ-5TNtdDZGUf5FhTm245g 提取码&#xff1a;0278 pikachu-master&#xff1a; Github链接&#xff1a;https://github.com/zhuifengshaonianhanlu/pikachu 链接&#xff1a; https://pan.baidu.c…

R与RStudio简介及安装

目录 一、R与RStudio关系 二、R简介 2.1. 发展历史 2.2. R语言特点 三、安装指南 3.1 R安装指南 3.2 R studio安装指南 一、R与RStudio关系 R是统计领域广泛使用的工具&#xff0c;属于GNU系统的一个自由、免费、源代码开放的软件&#xff0c;是 用于统计计算和统计绘图…

netty基础知识梳理和总结

目录标题 由来netty整体结构核心功能可扩展的事件模型统一的通信 API零拷贝机制与字节缓冲区 传输服务协议支持 netty的IO模型netty核心组件ChannelEventLoop、EventLoopGroupChannelHandlerChannelPipelineBootstrapFuture netty的bytebufbytebuf的内部构造bytebuf的使用模式B…

《Head First设计模式》读书笔记 —— 单件模式

文章目录 为什么需要单件模式单件模式典型实现剖析定义单件模式本节用例多线程带来的问题解决问题优化 Q&A总结 《Head First设计模式》读书笔记 相关代码&#xff1a; Vks-Feng/HeadFirstDesignPatternNotes: Head First设计模式读书笔记及相关代码 用来创建独一无二的&a…

tailwindcss 前端 css 框架 无需写css 快速构建页面

版本&#xff1a;VUE3 TS 框架 vite 文章中使用tailwindcss 版本&#xff1a; ^3.4.17 简介&#xff1a; Tailwind CSS 一个CSS 框架&#xff0c;提供组件化的样式&#xff0c;直接在HTML 中编写样式&#xff0c;无需额外自定义CSS &#xff0c;快速&#xff01; 简洁&#…

给小米/红米手机root(工具基本为官方工具)——KernelSU篇

目录 前言准备工作下载刷机包xiaomirom下载刷机包【适用于MIUI和hyperOS】“hyper更新”微信小程序【只适用于hyperOS】 下载KernelSU刷机所需程序和驱动文件 开始刷机设置手机第一种刷机方式【KMI】推荐提取boot或init_boot分区 第二种刷机方式【GKI】不推荐 结语 前言 刷机需…

路由器的WAN口和LAN口有什么区别?

今时今日&#xff0c;移动终端盛行的时代&#xff0c;WIFI可以说是家家户户都有使用到的网络接入方式。那么路由器当然也就是家家户户都不可或缺的设备了。而路由器上的两个实现网络连接的基础接口 ——WAN 口和 LAN 口&#xff0c;到底有什么区别&#xff1f;它们的功能和作用…

【Open X-Embodiment】简单数据下载与预处理

文章目录 1. RLDS Dataset2. 处理成numpy格式3. 存储桶 1. RLDS Dataset 从 Octo 里面找到数据下载的代码 rlds_dataset_mod github 按照官网代码配置环境后&#xff0c;修改 prepare_open_x.sh&#xff0c;相当于只用 gsutil 下载数据&#xff1a; DOWNLOAD_DIR/mnt/data…

神经网络八股(1)

1.什么是有监督学习&#xff0c;无监督学习 有监督学习是带有标签的&#xff0c;无监督学习是没有标签的&#xff0c;简单来说就是有监督学习的输入输出都是固定的&#xff0c;已知的&#xff0c;无监督学习输入是已知的&#xff0c;输出是不固定的&#xff0c;无监督学习是通…

达梦:开发 ODBC配置指南

目录 达梦数据库DM8 ODBC配置指南&#xff08;Linux环境&#xff09;ODBC一、环境准备二、核心配置步骤1. 安装unixODBC2. 配置ODBC驱动&#xff08;odbcinst.ini&#xff09;3. 配置数据源&#xff08;odbc.ini&#xff09; 三、连接测试与验证1. 使用isql工具测试2. 执行基础…

Python游戏编程之赛车游戏6-1

通过Python的pygame模块可以实现赛车游戏&#xff0c;如图1所示。 图1 赛车游戏 从图1中可以看出&#xff0c;玩家通过键盘的左右键操作蓝色汽车躲避红色汽车的撞击&#xff0c;每成功躲避过一辆红色汽车&#xff0c;则玩家得一分。当蓝色汽车被红色汽车撞击后&#xff0c;游戏…

【Linux网络】序列化、守护进程、应用层协议HTTP、Cookie和Session

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;Linux 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 1、序列化和反序列化2、守护进程2.1 什么是进程组&#xff1f;2.2 什么是会话&#xff1f; 3、应用层协议HTTP3.1 HTTP协议3.2 HT…

【Java消息队列】应对消息丢失、重复、顺序与积压的全面策略

应对消息丢失、重复、顺序与积压的全面策略 引言kafka消息丢失生产者消费者重复消费顺序消费消息积压生产者消费者其他RabbitMQ消息丢失生产者事务机制,保证生产者发送消息到 RabbitMQ Server发送方确认机制,保证消息能从交换机路由到指定队列保证消息在 RabbitMQ Server 中的…

Windows 上源码安装 FastGPT

FastGPT 是一个强大的 AI RAG 平台&#xff0c;值得我们去学习了解。与常见的 Python 体系不同&#xff0c;Fast GPT 采用 Node.js/Next.js 平台&#xff08;对于广大 JS 开发者或前端开发者比较亲切友好&#xff09;&#xff0c;安装或部署比较简单。虽然一般情况下推荐简单的…

【HeadFirst系列之HeadFirstJava】第5天之超强力方法 —— 从战舰游戏到循环控制

编写程序&#xff1a;超强力方法 —— 从战舰游戏到循环控制 在《Head First Java》的第五章节中&#xff0c;作者通过一个简单的战舰游戏示例&#xff0c;深入讲解了如何编写Java程序&#xff0c;并重点介绍了方法和循环控制的使用。这一章节的核心思想是&#xff1a;通过模块…

软件单元测试的技术要求

文章目录 一、软件单元测试的概念二、测试对象三、测试目的四、进入条件五、测试内容六、测试环境七、测试实施方一、软件单元测试的概念 单元测试(Unit Testing),是指对软件中的最小可测试单元进行测试验证。单元测试是白盒测试,主要依据软件详细设计和软件代码进行,不仅…

‌挖数据平台对接DeepSeek推出一键云端部署功能:API接口驱动金融、汽车等行业智能化升级

云端部署 引言&#xff1a;当数据生产力遇上云端智能化 2025年2月23日&#xff0c;国内领先的数据服务商挖数据平台宣布与人工智能巨头DeepSeek达成战略合作&#xff0c;正式推出“一键云端部署”功能。这一功能以API&#xff08;应用程序接口&#xff09;为核心&#xff0c;通…