首页 > 解决方案 > 无法在同一语句中修剪字符串并获取子字符串

问题描述

我正在从数据库中获取一个长度为 80k 到 90K 个字符的字符串。

我想删除所有前导white-spaces并获取substring大约 50k 个字符并将其存储到 aStringBuilder中,因为我必须将其作为参数传递给另一个函数。

代码:

StringBuider sb = new StringBuilder(dr["str"].ToString().TrimStart().SubString(0,50000)); 

但我得到以下异常:

mscorlib.dll 中出现“System.ArgumentOutOfRangeException”类型的未处理异常

附加信息:索引和长度必须引用字符串中的位置。

可以肯定的是,即使在修剪之后,字符串也会有超过 50k 个字符。

如果我先进行修剪然后获取子字符串,那么它可以正常工作。背后的原因可能是什么?不能substring() 在飞来飞去的弦上演奏吗?

标签: c#.netstringsubstring

解决方案


似乎并非Length此表中的所有字符串都是>= 50000(至少不是在 之后TrimStart)。如果字符串较短,则会出现此异常。这更安全、更易读、更高效:

string str = dr["str"].ToString().TrimStart();
if(str.Length > 50000)
    str = str.Remove(50000); // or Substring(0,50000)
var sb = new StringBuilder(str);

推荐阅读