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 可以避免创建大量临时字符串,从而提高性能。

cs 复制代码
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 来高效地拼接字符串。

cs 复制代码
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 对象中。

cs 复制代码
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 来动态地拼接查询条件。

cs 复制代码
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 来高效地拼接输入字符。

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

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

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

相关推荐
学逆向的3 分钟前
C 数据溢出与精度丢失
c语言·开发语言·网络安全
silvamux_13 分钟前
Spring Boot 调用大模型 api 最小可跑教程
java·spring boot·后端
今年下半年15 分钟前
【Spring Boot 】通过 OpenFeign 请求第三方接口
java·spring boot·后端·openfeign
范什么特西25 分钟前
亲和路由(inspect)
java
她说可以呀27 分钟前
Docker 镜像的两种创建方式
java·分布式·docker
霸道流氓气质37 分钟前
AgentFlow 入门与实战:Task-Based 并发、EWMA 动态调度与四道门禁的 Java 生产级编排
java·开发语言
愿得一猪蹄1 小时前
# Java线程池实战,别再new Thread了
java
ee又momo1 小时前
# 深入理解Java注解,从使用到自定义
java
释厄6231 小时前
错误无误公理——错误正确本同源都迭代定律——逆转有价值
android·开发语言·kotlin
霸道流氓气质1 小时前
AI智能博客平台实战:RAG增强写作、多Agent协作与语义检索的Vue3 + Spring AI全栈实现
java·人工智能·spring