You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 10:27:18