有没有人知道处理String.Split时返回的条目数是否有上限?我有一个带有“1,1,1,1,1,1,1,1,...”的字符串,有600个条目,但它只返回返回数组中的201个条目。谢谢!
编辑: 它只是一行代码,我在运行时打开了观察者,以确保字符串仍然有600个逗号/条目。
string[] splitLine = s.Split(',');
生成的splitLine数组只包含201个条目。
编辑2: 没关系,我是一个白痴,无法计算,没有意识到字符串有601个字符,其中包括逗号和空格。谢谢大家!
答案 0 :(得分:3)
正如您在String.Split方法的源代码中看到的那样,分割字符串没有限制。
[ComVisible(false)]
internal String[] SplitInternal(char[] separator, int count, StringSplitOptions options)
{
if (count < 0)
throw new ArgumentOutOfRangeException("count",
Environment.GetResourceString("ArgumentOutOfRange_NegativeCount"));
if (options < StringSplitOptions.None || options > StringSplitOptions.RemoveEmptyEntries)
throw new ArgumentException(Environment.GetResourceString("Arg_EnumIllegalVal", options));
Contract.Ensures(Contract.Result<String[]>() != null);
Contract.EndContractBlock();
bool omitEmptyEntries = (options == StringSplitOptions.RemoveEmptyEntries);
if ((count == 0) || (omitEmptyEntries && this.Length == 0))
{
return new String[0];
}
int[] sepList = new int[Length];
int numReplaces = MakeSeparatorList(separator, ref sepList);
//Handle the special case of no replaces and special count.
if (0 == numReplaces || count == 1) {
String[] stringArray = new String[1];
stringArray[0] = this;
return stringArray;
}
if(omitEmptyEntries)
{
return InternalSplitOmitEmptyEntries(sepList, null, numReplaces, count);
}
else
{
return InternalSplitKeepEmptyEntries(sepList, null, numReplaces, count);
}
}
参考: http://referencesource.microsoft.com/#mscorlib/system/string.cs,baabf9ec3768812a,references
答案 1 :(得分:1)
正如您在此处所见,拆分方法返回 600部分。
using System;
using System.Text;
public class Program
{
public static void Main()
{
var baseString = "1,";
var builder = new StringBuilder();
for(var i=0;i<599;i++)
{
builder.Append(baseString);
}
builder.Append("1");
var result = builder.ToString().Split(',');
Console.WriteLine("Number of parts:{0}",result.Length);
}
}