字符串分割返回的上限

本文关键字:返回 分割 字符串 | 更新日期: 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