字符串分割返回的上限
本文关键字:返回 分割 字符串 | 更新日期: 2023-09-27 17:54:15
有人知道处理String.Split时返回条目的数量是否有上限吗?我有一个字符串"1,1,1,1,1,1,1,1,1,…"有600个条目,但它只返回返回数组中的201个条目。谢谢!
编辑:这只是一行代码,我在运行时打开了监视器,以确保字符串仍然有600个逗号/条目。
string[] splitLine = s.Split(',');
生成的splitLine数组只包含201个条目。
编辑2:没关系,我是个白痴,不会数数,不知道这个字符串有601个字符,包括逗号和空格。谢谢大家!
您可以在String的源代码中看到。分割方法,对分割字符串没有限制。
[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/系统/string.cs baabf9ec3768812a、引用
从这里可以看到,split方法返回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);
}
}
https://dotnetfiddle.net/oDosIp