C#使用while循环移除字符串开头空白的代码错误排查
代码问题定位
你的代码有两个核心bug,和你推演的逻辑偏差点就在这:
- 忽略了C# 字符串不可变 的特性:
string类型一旦创建就无法修改,Substring()方法执行后会返回裁剪后的新字符串,完全不会改动原text变量。你在循环里调用text.Substring(i)后没有接收返回值,这句代码没有任何实际效果,最后返回的还是原始输入字符串。 - 缺少边界校验:如果传入空字符串、全空白字符串,索引
i递增到等于字符串长度时,再访问text[i]会直接触发索引越界异常。
修正方案
你的整体思路是对的:从字符串起始位置开始计数连续的空白字符,最后一次性裁剪掉开头的空白段即可,不需要在循环内反复执行裁剪操作(循环内反复生成新字符串反而会拉低性能)。
修正后的可运行代码:
public static string RemoveStartSpaces(string text) { // 空串直接返回,避免访问索引报错 if (string.IsNullOrEmpty(text)) { return text; } int i = 0; // 增加长度判断,防止i超出字符串最大索引 while (i < text.Length && char.IsWhiteSpace(text[i])) { i++; } // 循环结束时i指向第一个非空白字符的位置,一次性裁剪返回 return text.Substring(i); }
测试用例参考
- 输入
" test content",返回"test content" - 输入
"no_leading_space",i始终为0,直接返回原字符串 - 输入
" "(全空白),返回空字符串 - 输入
""(空串),直接返回空串,无异常
内容的提问来源于stack exchange,提问作者Julia Tryshkova
相关产品推荐
相关产品推荐

