我正在尝试拆分字符串对象,以便将其存储在NO-SQL数据库中,其中每列存储容量不超过64kb且我的字符串长度为220 kb。
我所做的是将我所拥有的任何字符串拆分成段。我想把它分成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时,会发生此问题。
知道为什么会这样吗?
答案 0 :(得分:7)
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
,并且已经四舍五入了。您可能需要考虑这一点,因为您的最后一个字符串最终会比其他字符串短。 (但是,在您的方案中,这可能会或可能不重要。)