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

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,我们可以更加高效地处理字符串拼接和修改操作。

相关文章:

  • three.js+WebGL踩坑经验合集(8.2):z-fighting叠面问题和camera.near的坑爹关系
  • C语言:在主函数中输入十个等长的字符串。用另一函数对它们排序,然后在主函数输出这10个已排好序的字符串。
  • 数据结构-栈、队列、哈希表
  • PyTorch与TensorFlow的对比:哪个框架更适合你的项目?
  • 什么是动态IP?静态IP和动态IP有什么区别?
  • C++中std::condition_variable_any、std::lock_guard 和 std::unique_
  • UE5控件组件显示UMG文本不正常
  • 1、AI量化学习资料 - 用DEEPSEEK玩转PTrade策略开发.zip\AI量化学习资料 - 1、PTrade策略开发提示词(参考模板).md
  • SpringBoot速成(14)文件上传P23-P26
  • 【JAVA实战】JAVA实现Excel模板下载并填充模板下拉选项数据
  • 【C++】36.C++IO流
  • 级联选择器多选动态加载
  • 洛谷P11042 [蓝桥杯 2024 省 Java B] 类斐波那契循环数
  • Linux系统配置阿里云yum源,安装docker
  • Step-Video-T2V:阶跃星辰发布最强开源视频生成模型(论文详解)
  • 《深度学习》——ResNet网络
  • 单纯禁用Cookie能否保证隐私安全?
  • 跳表的C语言实现
  • MySQL5.7 创建用户并授予超管权限脚本
  • uni-app发起网络请求的三种方式
  • 惠州网站建设 骏域网站建设/优秀软文营销案例
  • 北京今日确诊病例轨迹公布/关键词优化上海
  • 德州万企网站建设/手机如何创建网站
  • 网站制作案例哪家强/台湾搜索引擎
  • wordpress免登录评论/整站外包优化公司
  • 网站首页设计风格/广告信息发布平台