字符串拆分返回的上限?

时间:2016-07-04 01:21:07

标签: c# .net string split

有没有人知道处理String.Split时返回的条目数是否有上限?我有一个带有“1,1,1,1,1,1,1,1,...”的字符串,有600个条目,但它只返回返回数组中的201个条目。谢谢!

编辑: 它只是一行代码,我在运行时打开了观察者,以确保字符串仍然有600个逗号/条目。

string[] splitLine = s.Split(',');

生成的splitLine数组只包含201个条目。

编辑2: 没关系,我是一个白痴,无法计算,没有意识到字符串有601个字符,其中包括逗号和空格。谢谢大家!

2 个答案:

答案 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);
    }
}

https://dotnetfiddle.net/oDosIp