【发布时间】:2018-12-15 03:09:24
【问题描述】:
我正在从数据库中获取一个长度为 80k 到 90K 个字符的字符串。
我想删除所有前导 white-spaces 并获得大约 50k 个字符的 substring 并将其存储到 StringBuilder 中,因为我必须将其作为参数传递给另一个函数。
代码:
StringBuider sb = new StringBuilder(dr["str"].ToString().TrimStart().SubString(0,50000));
但我得到以下异常:
在 mscorlib.dll 中发生了“System.ArgumentOutOfRangeException”类型的未处理异常
附加信息:索引和长度必须引用一个位置 在字符串中。
可以肯定的是,即使在修剪之后,字符串也会有超过 50k 个字符。
如果我先进行修剪然后获取子字符串,那么它工作正常。
背后的原因可能是什么? substring() 不能在即时出现的字符串上执行吗?
【问题讨论】:
-
不要假设,当您在修剪后调试和检查字符串时,它是否有 50k+ 个字符?子串不这么认为。
-
如果您要求一个 40,000 个字符长的字符串的前 50,000 个字符,您认为会发生什么?
new StringBuilder(dr["str"].ToString().TrimStart().Length的值是多少? -
你误会了@HarshilDoshi。
-
这是一个循环论证。您声称您的输入超过 50K 个字符。这不是真的。如果您希望进一步继续讨论,请分享
new StringBuilder(dr["str"].ToString().TrimStart().Length的价值。不要猜测,不要讨论,不要假设。运行代码,获取价值并分享。 -
如果你能制作一个最小的、完整的和可验证的 SubString 行为不正确的演示,我会买一顶帽子吃掉它。