当前位置: 首页 > 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
*/

http://www.lryc.cn/news/273956.html

相关文章:

  • python开发案例教程-清华大学出版社(张基温)答案(4.2)
  • 【MATLAB】【数字信号处理】线性卷积和抽样定理
  • 什么是 MVVM ?
  • Redis(一)
  • 自动驾驶预测-决策-规划-控制学习(1):自动驾驶框架、硬件、软件概述
  • SSM建材商城网站----计算机毕业设计
  • js逆向第9例:猿人学第2题-js混淆-动态cookie1
  • [论文分享]TimesURL:通用时间序列表示学习的自监督对比学习
  • 解决sublime中文符号乱码问题
  • 厚积薄发11年,鸿蒙究竟有多可怕
  • pyDAL一个python的ORM(4) pyDAL查询操作
  • 如何通过Python将各种数据写入到Excel工作表
  • 跟着cherno手搓游戏引擎【2】:日志系统spdlog和premake的使用
  • Ubuntu20.04 上启用 VCAN 用作本地调试
  • LeetCode(31) 下一个排列
  • Git LFS: 简单高效的大文件版本控制
  • 如何培养用户思维
  • 由浅入深理解C#中的事件
  • Nginx(十六) 配置文件详解 - server stream服务流
  • Css中默认与继承
  • gitee上的vue大屏项目
  • 【LeetCode:114. 二叉树展开为链表 | 二叉树 + 递归】
  • 社保养老金发放计算方法
  • 概率论基础复习题
  • c++,mutex,unique_lock,recursive_mutex,shared_mutex对比分析
  • MySQL与Oracle数据库在网络安全等级方面用到的命令
  • MySQL——视图
  • 【响应式编程-03】Lambda表达式底层实现原理
  • 深入理解可变参数
  • Centos7.9和Debian12部署Minio详细流程