C#中从字符串删除指定位置字符的简单高效方法有哪些?
结论先行
C# 中 string 是不可变类型,不存在直接修改原字符串实例的方法,所有修改操作都会返回新的字符串实例,你提到的直接调用自定义方法修改原字符串的写法无法实现。但原生已经提供了等价于 RemoveAt 的能力,效率远高于转 List<char> 再处理的方案。
具体实现方案
1. 单次删除指定位置字符:直接用 string.Remove() 原生方法
string 自带的 Remove(int startIndex, int count) 方法就可以实现按索引删除指定数量字符的需求,不需要额外转集合:
- 删除第一个字符(索引0,删除1个):
string something = "12+3-1"; something = something.Remove(0, 1); Console.WriteLine(something); // 输出 "2+3-1"
- 删除索引2的字符(删除1个):
string something = "12+3-1"; something = something.Remove(2, 1); Console.WriteLine(something); // 输出 "123-1"
2. 多次批量修改字符串:用 StringBuilder 性能更高
如果需要连续做多次删除/插入/修改操作,用 StringBuilder 可以避免每次修改都生成新字符串实例的开销,它本身自带可变操作能力,也支持 Remove 方法:
StringBuilder sb = new StringBuilder("12+3-1"); sb.Remove(0, 1); // 删第一个字符 sb.Remove(1, 1); // 继续删当前索引1的字符 string result = sb.ToString();
关于转 List<char> 方案的说明
你提到的转 List 的写法逻辑上可行,但存在两次额外的全量拷贝开销(字符串转List一次,List删完转字符串又一次),性能比直接用 Remove 差,没有特殊需求不推荐使用。
内容的提问来源于stack exchange,提问作者Maciek
相关产品推荐
相关产品推荐

