9.C# —— string拓展方法、StringBuilder高性能处理

一、string 常用补充方法

1. Contains()

判断字符串是否包含指定内容,返回 true/false

cs 复制代码
string s = "杀杀杀";
Console.WriteLine(s.Contains("杀1")); // false

2. Insert()

在指定索引位置插入字符串。

cs 复制代码
string ss = s.Insert(0, "都是");
Console.WriteLine(ss); // 都是杀杀杀

3. LastIndexOf()

从后往前查找字符索引。

cs 复制代码
Console.WriteLine(s.LastIndexOf("杀")); // 2
Console.WriteLine(s.IndexOf("杀"));    // 0

4. Remove()

从指定位置开始,移除指定数量的字符。

cs 复制代码
Console.WriteLine(s.Remove(0, 1)); // 杀杀

5. ToCharArray()

将字符串转为字符数组,可使用 foreach 遍历。

cs 复制代码
char[] cs = s.ToCharArray();
foreach (var item in cs)
{
    Console.WriteLine(item + "------");
}

二、string 与 StringBuilder 核心原理

  1. string 是不可变字符串,一旦创建就不能修改,底层是 char [ ]
  2. StringBuilder 是可变字符串,可以增删改,自动扩容,不会频繁创建新对象。

三、Stopwatch 性能测试

作用:检测代码执行效率、耗时

cs 复制代码
Stopwatch stopwatch = new Stopwatch(); // 检测效率的对象
stopwatch.Start(); // 开始计时

string msg = "";
for (int i = 0; i < 50000; i++)
{
    msg += i;
}

stopwatch.Stop(); // 停止计时
Console.WriteLine($"{stopwatch.Elapsed.Minutes}:{stopwatch.Elapsed.Seconds}:{stopwatch.Elapsed.Milliseconds}");

StringBuilder 性能测试

cs 复制代码
Stopwatch stopwatch1 = new Stopwatch();
stopwatch1.Start();

StringBuilder sb = new StringBuilder();
for (int i = 0; i < 50000; i++)
{
    sb.Append(i);
}

stopwatch1.Stop();
Console.WriteLine($"{stopwatch1.Elapsed.Minutes}:{stopwatch1.Elapsed.Seconds}:{stopwatch1.Elapsed.Milliseconds}");

string 拼接极慢 StringBuilder 拼接极快


四、StringBuilder 常用方法

cs 复制代码
StringBuilder sb = new StringBuilder();

1. Append / AppendLine

追加内容(AppendLine 自动换行)

cs 复制代码
sb.AppendLine("苏有朋");
sb.Append("罗志祥");

2. Insert

指定位置插入

cs 复制代码
sb.Insert(0, "tea");

3. Remove

删除指定范围

cs 复制代码
sb.Remove(0, 3);

4. Clear

清空内容

cs 复制代码
sb.Clear();

5. Replace

替换内容

cs 复制代码
sb.Replace("罗志祥", "***");

五、StringBuilder 两个重要属性

cs 复制代码
sb.Length;    // 实际字符串长度
sb.Capacity;  // 分配的内存容量(默认 16)

示例:

cs 复制代码
StringBuilder sb2 = new StringBuilder();
sb2.Append("1");
sb2.Append("2");

Console.WriteLine(sb2.Length);   // 2
Console.WriteLine(sb2.Capacity); // 16
相关推荐
李星星_Alex5 小时前
如何通过 C# 抓取抖音 RTMP 推流码实现自主推流
c#·抖音
捷米特网关模块通讯8 小时前
以太网转换模块助力欧姆龙PLC实现10台终端同时监控
上位机·数据采集·触摸屏·以太网模块·工业自动化·总线协议·欧姆龙plc
qq7422349849 小时前
全面深入的C#核心知识体系与编程实践精要——从语法基础到高级特性系统学习指南
java·算法·c#
fai厅的秃头姐!10 小时前
2586. 统计范围内的元音字符串数
开发语言·c#
正运动技术10 小时前
C#运动控制开源(二): CAD导图和小线段速度前瞻优化
c#·正运动技术·运动控制器·运动控制卡·正运动控制器·运动控制开源·ethercat运动控制器
楼田莉子11 小时前
C#学习:分支与循环
服务器·后端·学习·c#
还是叫明11 小时前
C#使用YOLO26进行图像识别(目标检测)
opencv·yolo·目标检测·c#
魔法阵维护师12 小时前
从零开发游戏需要学习的c#模块,第二十三章(粒子效果 —— 让游戏“活”起来本课目标)
学习·游戏·c#
魔法阵维护师13 小时前
从零开发游戏需要学习的c#模块,第二十二章(音效与背景音乐)
学习·游戏·c#