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

C#用StringBuilder高效处理字符串

目录

一、背景

二、使用StringBuilder便捷、高效地操作字符串

三、实例

1.源码

2.生成效果

四、实例中知识点

1.StringBuilder 构造函数

(1)定义

(2)重载

(3)StringBuilder()

(4)StringBuilder(Int32)

(5)StringBuilder(String)

(6)StringBuilder(Int32, Int32)

(7)StringBuilder(String, Int32)

(8)StringBuilder(String, Int32, Int32, Int32)

2.StringBuilder属性

3.StringBuilder方法

2.Environment.NewLine 属性


一、背景

        符串是不可改变的对象,字符串在创建以后,就不会被改变,当使用字符串对象的Replace、split或Remove等方法操作字符串时,实际上是产生了一个新的字符串对象,原有的字符串如果没有被引用,将会被垃圾收集器回收。如果频繁地使用字符串中的方法对字符串进行操作,会产生大量的没有被引用的字符串对象,这会增加垃圾收集的压力,造成系统资源的浪费。

二、使用StringBuilder便捷、高效地操作字符串

        因为使用StringBuilder操作字符串不会产生新的字符串对象,在使用StringBuilder对象前首先要引用命名空间System.Text。

        由于字符串的不可变性,使用StringBuilder操作字符串无疑是非常方便和有效的方法。StringBuilder对象的使用方法:

StringBuilder P_stringbuilder = new StringBuilder("abc");  //使用new关键字调用构造方法创建对象
P_stringbuilder.Insert(2,Environment.NewLine);             //调用对象的Insert方法向字符串中插入字符

        建立StringBuilder对象后,可以调用操作字符串的方法,从而方便操作字符串对象适当地使用StringBuilder操作字符串,会使程序运行更加高效。

三、实例

1.源码

//按标点符号对字符串分行显示
using System.Text;namespace _039
{public partial class Form1 : Form{private GroupBox? groupBox1;private TextBox? textBox3;private Button? button1;private TextBox? textBox1;private TextBox? textBox2;public Form1(){InitializeComponent();Load += Form1_Load;}private void Form1_Load(object? sender, EventArgs e){// // textBox3// textBox3 = new TextBox{Location = new Point(12, 22),Multiline = true,Name = "textBox3",Size = new Size(310, 46),TabIndex = 6,Text = "在下面文本框中输入字符串,并使用(,)号分隔,点击分行显示按钮,根据(,)号对字符串进行分行。"};// // button1//      button1 = new Button{Location = new Point(130, 170),Name = "button1",Size = new Size(75, 23),TabIndex = 3,Text = "分行显示",UseVisualStyleBackColor = true};button1.Click += Button1_Click;// // textBox1//            textBox1 = new TextBox{Location = new Point(12, 80),Multiline = true,Name = "textBox1",Size = new Size(310, 84),TabIndex = 4};// // textBox2//            textBox2 = new TextBox{Location = new Point(12, 200),Multiline = true,Name = "textBox2",Size = new Size(310, 84),TabIndex = 5};// // groupBox1//            groupBox1 = new GroupBox{Location = new Point(0, 0),Name = "groupBox1",Size = new Size(334, 74),TabIndex = 0,TabStop = false,Text = "操作说明:"};groupBox1.Controls.Add(textBox3);groupBox1.SuspendLayout();// // Form1// AutoScaleDimensions = new SizeF(7F, 17F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(334, 296);Controls.Add(textBox2);Controls.Add(textBox1);Controls.Add(button1);Controls.Add(groupBox1);Name = "Form1";StartPosition = FormStartPosition.CenterScreen;Text = "按标点符号对字符串分行";groupBox1.ResumeLayout(false);groupBox1.PerformLayout();}private void Button1_Click(object? sender, EventArgs e){StringBuilder stringbuilder = new(textBox1!.Text);      //创建字符串处理对象for (int i = 0; i < stringbuilder.Length; i++)if (stringbuilder[i] == ',')                       //判断是否出现(,)号stringbuilder.Insert(++i, Environment.NewLine); //向字符串内添加换行符textBox2!.Text = stringbuilder.ToString();              //得到分行后的字符串}}
}

2.生成效果

 

四、实例中知识点

1.StringBuilder 构造函数

(1)定义

命名空间:
System.Text
程序集:
System.Runtime.dll
初始化 StringBuilder 类的新实例。

(2)重载

StringBuilder()初始化 StringBuilder 类的新实例。
StringBuilder(Int32)使用指定的容量初始化 StringBuilder 类的新实例。
StringBuilder(String)使用指定的字符串初始化 StringBuilder 类的新实例。
StringBuilder(Int32, Int32)初始化 StringBuilder 类的新实例,该类起始于指定容量并且可增长到指定的最大容量。
StringBuilder(String, Int32)使用指定的字符串和容量初始化 StringBuilder 类的新实例。
StringBuilder(String, Int32, Int32, Int32)从指定的子字符串和容量初始化 StringBuilder 类的新实例。

(3)StringBuilder()

        初始化 StringBuilder 类的新实例。

public StringBuilder ();
//以下示例演示如何在没有参数的情况下调用 StringBuilder 构造函数。
//此实例的字符串值设置为 String.Empty,容量设置为特定于实现的默认容量。
StringBuilder stringBuilder = new();

(4)StringBuilder(Int32)

        使用指定的容量初始化 StringBuilder 类的新实例。

public StringBuilder (int capacity);参数
capacity
Int32
此实例的建议起始大小。例外
ArgumentOutOfRangeException
capacity 小于零。
int capacity = 255;
StringBuilder stringBuilder = new(capacity);

        参数 capacity 定义当前实例分配的内存中可以存储的最大字符数。 其值分配给 Capacity 属性。 如果当前实例中要存储的字符数超过此值 capacity ,则 StringBuilder 对象会分配额外的内存来存储这些字符。此实例的字符串值设置为 String.Empty。 如果 capacity 为零,则使用特定于实现的默认容量。

(5)StringBuilder(String)

         使用指定的字符串初始化 StringBuilder 类的新实例。

public StringBuilder(string value);参数
value
String
用于初始化实例值的字符串。 如果 value 为 null,则新的 StringBuilder 将包含空字符串(即包含 Empty)。
//如何使用指定的字符串调用 StringBuilder 构造函数。
//如果 value 为 null,则新的 StringBuilder 将包含空字符串(即包含 Empty)。
string initialString = "Initial string.";
StringBuilder stringBuilder = new(initialString);

(6)StringBuilder(Int32, Int32)

        初始化 StringBuilder 类的新实例,该类起始于指定容量并且可增长到指定的最大容量。

public StringBuilder (int capacity, int maxCapacity);参数
capacity
Int32
StringBuilder 的建议起始大小。maxCapacity
Int32
当前字符串可包含的最大字符数。例外
ArgumentOutOfRangeException
maxCapacity 小于一,capacity 小于零,或 capacity 大于 maxCapacity。
//如何调用 StringBuilder 具有指定容量和最大容量的构造函数。
int capacity = 255;
int maxCapacity = 1024;
StringBuilder stringBuilder = new(capacity, maxCapacity);

        参数 capacity 定义当前实例分配的内存中可以存储的最大字符数。 其值分配给 Capacity 属性。 如果当前实例中要存储的字符数超过此值 capacity ,则 StringBuilder 对象会分配额外的内存来存储这些字符。

        如果 capacity 为零,则使用特定于实现的默认容量。

        属性 maxCapacity 定义当前实例可以容纳的最大字符数。 其值分配给 MaxCapacity 属性。 如果要存储在当前实例中的字符数超过此值 maxCapacity ,则 StringBuilder 对象不会分配额外的内存,而是引发异常。

(7)StringBuilder(String, Int32)

        使用指定的字符串和容量初始化 StringBuilder 类的新实例。

public StringBuilder (string value, int capacity);
参数
value
String
用于初始化实例值的字符串。 如果 value 为 null,则新的 StringBuilder 将包含空字符串(即包含 Empty)。capacity
Int32
StringBuilder 的建议起始大小。例外
ArgumentOutOfRangeException
capacity 小于零。
//如何使用初始字符串和指定的容量调用 StringBuilder 构造函数。
string initialString = "Initial string. ";
int capacity = 255;
StringBuilder stringBuilder = new(initialString, capacity);

        参数 capacity 定义当前实例分配的内存中可以存储的最大字符数。 其值分配给 Capacity 属性。 如果当前实例中要存储的字符数超过此值 capacity ,则 StringBuilder 对象会分配额外的内存来存储这些字符。

        如果 capacity 为零,则使用特定于实现的默认容量。

(8)StringBuilder(String, Int32, Int32, Int32)

         从指定的子字符串和容量初始化 StringBuilder 类的新实例。

public StringBuilder (string value, int startIndex, int length, int capacity);参数
value
String
字符串包含用于初始化此实例值的子字符串。 如果 value 为 null,则新的 StringBuilder 将包含空字符串(即包含 Empty)。startIndex
Int32
value 中子字符串开始的位置。length
Int32
子字符串中的字符数。capacity
Int32
StringBuilder 的建议起始大小。例外
ArgumentOutOfRangeException
capacity 小于零。
- 或 -
startIndex 加 length 不是 value 中的位置。
//如何使用指定的字符串调用 StringBuilder 构造函数。
string initialString = "Initial string for stringbuilder.";
int startIndex = 0;
int substringLength = 14;
int capacity = 255;
StringBuilder stringBuilder = new(initialString, startIndex, substringLength, capacity);

        参数 capacity 定义当前实例分配的内存中可以存储的最大字符数。 其值分配给 Capacity 属性。 如果当前实例中要存储的字符数超过此值 capacity ,则 StringBuilder 对象会分配额外的内存来存储这些字符。

        如果 capacity 为零,则使用特定于实现的默认容量。

2.StringBuilder属性

3.StringBuilder方法

2.Environment.NewLine 属性

         等效于换行符。NewLine 自动追加到由 Console.WriteLine 和 StringBuilder.AppendLine 方法处理的文本。

提供 NewLine 的功能通常是换行符、换行符、换行符、回车符、CRLF 和行尾术语的含义。
命名空间:
System程序集:
netstandard.dll获取为此环境定义的换行字符串。属性值
String
\r\n 对于非 Unix 平台或 \n Unix 平台。

        实例:

// 显示用换行符分隔的两行
namespace ConsoleApp2
{class Sample{public static void Main(){Console.WriteLine();Console.WriteLine($"NewLine: {Environment.NewLine}  first line{Environment.NewLine}  second line");}}
}/*
运行结果:NewLine:first linesecond line
*/

相关文章:

C#用StringBuilder高效处理字符串

目录 一、背景 二、使用StringBuilder便捷、高效地操作字符串 三、实例 1.源码 2.生成效果 四、实例中知识点 1.StringBuilder 构造函数 &#xff08;1&#xff09;定义 &#xff08;2&#xff09;重载 &#xff08;3&#xff09;StringBuilder() &#xff08;4&…...

python开发案例教程-清华大学出版社(张基温)答案(4.2)

目录 练习 4.2 1. 代码分析题 2. 程序设计题 练习 4.2 1. 代码分析题 阅读下面的代码&#xff0c;给出输出结果。 &#xff08;1&#xff09; class A:def __init__(self,a,b,c):self.xabca A(3,5,7);b getattr(a,x);setattr(a,x,b3);print(a.x)18 &#xff08;2&…...

【MATLAB】【数字信号处理】线性卷积和抽样定理

已知有限长序列&#xff1a;xk1,2,1,1,0,-3, hk[1,-1,1] , 计算离散卷积和ykxk*h(k) 。 程序如下&#xff1a; function [t,x] My_conv(x1,x2,t1,t2,dt) %文件名与函数名对应 %自写的卷积函数 x conv(x1,x2)*dt; t0 t1(1) t2(1); L length(x1) length(x2)-2; t t0:dt…...

什么是 MVVM ?

课堂笔记 什么是 MVVM &#xff1f; MVVM 是一种架构模式&#xff0c;它最初是由微软的两位工程师在 2005 年的时候所提出的。 Model&#xff1a;Model代表的是你的数据View&#xff1a;视图&#xff0c;直接和用户打交道的ViewModel&#xff1a;ViewModel 是 View 和 Model…...

Redis(一)

1、redis Redis是一个完全开源免费的高性能&#xff08;NOSQL&#xff09;的key-value数据库。它遵守BSD协议&#xff0c;使用ANSI C语言编写&#xff0c;并支持网络和持久化。Redis拥有极高的性能&#xff0c;每秒可以进行11万次的读取操作和8.1万次的写入操作。它支持丰富的数…...

自动驾驶预测-决策-规划-控制学习(1):自动驾驶框架、硬件、软件概述

文章目录 前言&#xff1a;无人驾驶分级一、不同level的无人驾驶实例分析1.L2级别2.L3级别3.L4级别①如何在减少成本的情况下&#xff0c;实现类似全方位高精度的感知呢&#xff1f;②路侧终归是辅助&#xff0c;主车的智能才是重中之重&#xff1a;融合深度学习 二、无人驾驶的…...

SSM建材商城网站----计算机毕业设计

项目介绍 本项目分为前后台&#xff0c;前台为普通用户登录&#xff0c;后台为管理员登录&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录,管理员管理,注册用户管理,新闻公告管理,建材类型管理,配货点管理,建材商品管理,建材订单管理,建材评价管理等功能。 用…...

js逆向第9例:猿人学第2题-js混淆-动态cookie1

题目2:提取全部5页发布日热度的值,计算所有值的加和,并提交答案 (感谢蔡老板为本题提供混淆方案) 既然题目已经给出了cookie问题,那就从cookie入手,控制台找到数据请求地址 可以看到如下加密字符串m类似md5,后面跟着时间戳 m=45cc41dcdb15159ebb50564635f8e362|1704301…...

[论文分享]TimesURL:通用时间序列表示学习的自监督对比学习

论文题目&#xff1a;TimesURL: Self-supervised Contrastive Learning for Universal Time Series Representation Learning 论文地址&#xff1a;https://arxiv.org/abs/2312.15709 代码地址&#xff1a;暂无 摘要 学习适用于各种下游任务的通用时间序列表示具有挑战性&…...

解决sublime中文符号乱码问题

效果图 原来 后来 问题不是出自encode文件编码&#xff0c;而是win10的字体问题。 解决方法 配置&#xff1a; { "font_face":"Microsoft Yahei", "dpi_scale": 1.0 } 参考自 Sublime 输入中文显示方框问号乱码_sublime中文问号-CSDN博…...

厚积薄发11年,鸿蒙究竟有多可怕

​12月20日中国工程院等权威单位发布《2023年全球十大工程成就》。本次发布的2023全球十大工程成就包括“鸿蒙操作系统”在内。入围的“全球十大工程成就”&#xff0c;主要指过去五年由世界各国工程科技工作者合作或单独完成且实践验证有效的&#xff0c;并且已经产生全球影响…...

pyDAL一个python的ORM(4) pyDAL查询操作

1 、简单查询 rows db(db.person.dept marketing).select(db.person.id, db.person.name, db.person.dept) rows db(db.person.dept marketing).select() rows db(db.person.dept marketing).select(db.person.ALL) rows db().select(db.person.ALL) / db(db.person).se…...

如何通过Python将各种数据写入到Excel工作表

在数据处理和报告生成等工作中&#xff0c;Excel表格是一种常见且广泛使用的工具。然而&#xff0c;手动将大量数据输入到Excel表格中既费时又容易出错。为了提高效率并减少错误&#xff0c;使用Python编程语言来自动化数据写入Excel表格是一个明智的选择。Python作为一种简单易…...

跟着cherno手搓游戏引擎【2】:日志系统spdlog和premake的使用

配置&#xff1a; 日志库文件github&#xff1a; GitHub - gabime/spdlog: Fast C logging library. 新建vendor文件夹 将下载好的spdlog放入 配置YOTOEngine的附加包含目录&#xff1a; 配置Sandbox的附加包含目录&#xff1a; 包装spdlog&#xff1a; 在YOTO文件夹下创建…...

Ubuntu20.04 上启用 VCAN 用作本地调试

目录 一、启用本机的 VCAN​ 编辑 1.1 加载本机的 vcan 1.2 添加本机的 vcan0 1.3 查看添加的 vcan0 1.4 开启本机的 vcan0 1.5 关闭本机的 vcan0 1.6 删除本机的 vcan0 二、测试本机的 VCAN 2.1 CAN 发送数据 代码 2.2 CAN 接收数据 代码 2.3 CMakeLists.…...

LeetCode(31) 下一个排列

整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如&#xff0c;arr [1,2,3] &#xff0c;以下这些都可以视作 arr 的排列&#xff1a;[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地&#xf…...

Git LFS: 简单高效的大文件版本控制

Git Large File Storage 问题 在使用git上传大文件时候&#xff0c;git push时候会报错: remote: error: File xxx.tar.gz is 135.17 MB; this exceeds GitHubs file size limit of 100 MB可以看到&#xff0c;git限制上传大小是100MB&#xff0c;超过的话就会报错&#xff…...

如何培养用户思维

产品开发是根据用户要求建造出系统的过程&#xff0c;产品开发是一项包括需求捕捉、需求分析、设计、实现和测试的系统工程&#xff0c;一般通过某种程序设计语言来实现。然而用户思维能够帮助企业更好地理解市场需求&#xff0c;进行产品的开发和完善&#xff0c;用户是企业产…...

由浅入深理解C#中的事件

目录 本文较长&#xff0c;给大家提供了目录&#xff0c;可以直接看自己感兴趣的部分。 前言有关事件的概念示例​ 简单示例​ 标准 .NET 事件模式​ 使用泛型版本的标准 .NET 事件模式​ 补充总结 参考前言 前面介绍了C#中的委托&#xff0c;事件的很多部分都与委托…...

Nginx(十六) 配置文件详解 - server stream服务流

本篇文章主要讲 ngx_stream_core_module 模块下各指令的使用方法&#xff0c;Nginx默认未配置该模块&#xff0c;需要用“--with-stream”配置参数重新编译Nginx。 worker_processes auto;error_log /var/log/nginx/error.log info;events {worker_connections 1024; }stream…...

Css中默认与继承

initial默认样式&#xff1a; initial 用于设置 Css 属性为默认值 h1 {color: initial; }如display或position不能被设置为initial&#xff0c;因为有默认属性。例如&#xff1a;display:inline inherit继承样式&#xff1a; inherit 用于设置 Css 属性应从父元素继承 di…...

gitee上的vue大屏项目

在 Gitee 上,有几个值得注意的 Vue 大屏项目:vue-big-screen-plugin (Gitee): 这是一个基于 Vue3、Typescript、DataV 和 ECharts5 框架的可视化大屏项目。它使用 .vue 和 .tsx 文件构建界面,并采用新版动态屏幕适配方案。这个项目支持数据的动态刷新渲染,内部的 DataV 和 …...

【LeetCode:114. 二叉树展开为链表 | 二叉树 + 递归】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…...

社保养老金发放计算方法

退休后养老金计算公式很复杂&#xff0c;自己自行百度查一下&#xff0c;这里说一下男性&#xff0c;女工人&#xff0c;女干部之间计算差别。 退休后&#xff0c;能到手的养老金多少&#xff0c;取决于你的个人账户里的钱&#xff0c;个人账户里的钱越多&#xff0c;到手养老…...

概率论基础复习题

一、填空题 二、选择题 答案&#xff1a;B 答案&#xff1a;C 答案&#xff1a;C 答案&#xff1a;D。统计量不含任何未知参数。 答案&#xff1a;A 答案&#xff1a;C 样本均值是总体均值的无偏估计&#xff1b;样本方差是总体方差的无偏估计。 答案&#xff1a;B。统计值是一…...

c++,mutex,unique_lock,recursive_mutex,shared_mutex对比分析

当处理多线程并发时&#xff0c;正确使用锁是确保线程安全的关键。 1. std::mutex&#xff08;互斥锁&#xff09;&#xff1a; std::mutex 是C标准库提供的最基本的锁。它的基本使用如下&#xff1a; #include <iostream> #include <mutex> #include <threa…...

MySQL与Oracle数据库在网络安全等级方面用到的命令

MySQL数据库命令集 查看数据库版本 SELECT VERSION(); 空口令查询 SELECT user,host,account_locked FROM mysql.user WHERE user ; SELECT * FROM mysql.user; 查询 用户的密码加密情况 SELECT HOST,USER,PLUGIN FROM mysql.user; 查询是否有空用户 SELECT host,user,plug…...

MySQL——视图

目录 一.视图介绍 二.基本使用 三.视图规则和限制 一.视图介绍 视图是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表&#xff0c;基表的数据变化也会影响到视图。 二.基本使用 创…...

【响应式编程-03】Lambda表达式底层实现原理

一、简要描述 Lambda的底层实现原理Lambda表达式编译和运行过程 二、Lambda的底层实现原理 Lambda表达式的本质 函数式接口的匿名子类的匿名对象 反编译&#xff1a;cfr-0.145.jar 反编译&#xff1a;LambdaMetafactory.metafactory() 跟踪调试&#xff0c;转储Lambda类&#x…...

深入理解可变参数

1.C语言方式 目录 1.C语言方式 1.1.宏介绍 1.2.原理详解 1.3.宏的可变参数 1.4.案例分析 1.5.其他实例 2.C之std::initializer_list 2.1.简介 2.2.原理详解 2.3.案例分析 3.C之可变参数模版 3.1.简介 3.2.可变参数个数 3.3.递归包展开 3.4.逗号表达式展开 3.5…...

网站制作目标及要求/推广营销软件

背景 在开发过程中&#xff0c;由于后端与前端并行开发&#xff0c;或者前端需要等待后台开发&#xff0c;难以保证对接效率&#xff0c;同时即使用开发好的 API 对接&#xff0c;也有可能一个 API 不通就阻塞了整个软件的对接工作。同时对软件的敏感度也很高&#xff0c;一不…...

网站怎么上传网站吗/惠东seo公司

编写聊天工具是学习网络编程比较有代表性的案例。 基于TCP socket 聊天工具的框架图如下&#xff1a; 其中&#xff0c;标准输入是键盘&#xff0c;标准输出是显示器的控制台。 具体过程如下&#xff1a; 首先客户端通过键盘输入字符串&#xff0c;通过标准输入流读取字符串…...

html5 mysql 网站开发/网络推广公司方案

嵌入式数据库SQLite的编译、安装和使用下文介绍的内容都是基于 RedHat Linux 9.0 平台的。引言&#xff1a;sqlite简介sqlite是嵌入式SQL数据库引擎SQLite(SQLite Embeddable SQL Database Engine)的一个扩展。SQLite是一个实现嵌入式SQL数据库引擎小型C语言库(C library)&…...

文化传媒有限公司网站建设/自己建网页

这个实现起来很简单&#xff0c;就两步&#xff0c;先读取excel文件单元格的值&#xff0c;然后插入SQL数据库中。下面我介绍一下如何从excel文件读取数据&#xff0c;并插入到mysql数据库中&#xff0c;主要用到openpyxl和pymysql这两个包&#xff0c;实验环境win7 python3.6 …...

本地网站环境搭建/怎么在网上推销产品

文章目录GitHub官网官网Demo指引zuul概念zuul功能授权和安全认证监控统计动态路由压测Load shadding [降低负载]Static Response handling [静态响应处理]Multiregion Resiliency1.zuul是一个提供动态路由&#xff0c;监控&#xff0c;弹性&#xff0c;安全等网关服务;GitHub官…...

如何做网站刷题/网站排名软件推荐

简单来说&#xff1a;就是用量子比特代替原来的普通比特。从物理层面上来看&#xff0c;量子计算机不是基于普通的晶体管&#xff0c;而是使用自旋方向受控的粒子(比如质子核磁共振)或者偏振方向受控的光子(学校实验大多用这个)等等作为载体。当然从理论上来看任何一个多能级系…...