String.Substring在索引大于100000时不起作用
本文关键字:100000时 不起作用 大于 索引 Substring String | 更新日期: 2023-09-27 17:58:13
我正在尝试拆分一个字符串对象,以便将其存储在NO-SQL数据库中,该数据库的每列存储容量不超过64kb,我的字符串长度为220kb。
我所做的是将我所拥有的任何字符串分割成若干段。我正试图把它分成4个,比如:
int howManyBytes = System.Text.ASCIIEncoding.ASCII.GetByteCount(serializedObject);
if (howManyBytes > 64000)
{
//divide by 4
int whereToSplit = Convert.ToInt32(howManyBytes * 0.25);
returnValue.MethodReturnValue = serializedObject.Substring(0, whereToSplit);
returnValue.MethodReturnValue2 = serializedObject.Substring(whereToSplit, whereToSplit * 2);
returnValue.MethodReturnValue3 = serializedObject.Substring(whereToSplit * 2, whereToSplit * 3);
returnValue.MethodReturnValue4 = serializedObject.Substring(whereToSplit * 3);
}
当我想做returnValue.MethodReturnValue3 = serializedObject.Substring(whereToSplit * 2, whereToSplit * 3)
时,我遇到了问题,索引超出了范围。当我的字符串长度为225358,whereToSplit为56340时,就会出现这个问题。
知道为什么会发生这种事吗?
String.Substring
的第二个参数是要返回的长度,而不是第二个拆分位置。这不能超过字符串的末尾。因此,它应该是:
returnValue.MethodReturnValue = serializedObject.Substring(0, whereToSplit);
returnValue.MethodReturnValue2 = serializedObject.Substring(whereToSplit, whereToSplit); // No *2
returnValue.MethodReturnValue3 = serializedObject.Substring(whereToSplit * 2, whereToSplit); // No *3
returnValue.MethodReturnValue4 = serializedObject.Substring(whereToSplit * 3);
此外,225358 * 0.25
实际上是56339.5
,并且四舍五入向上。您可能需要考虑到这一点,因为您的最后一个字符串最终会比其他字符串更短。(不过,在您的场景中,这可能很重要,也可能无关紧要。)