2016-07-04 75 views
0

有沒有人知道處理String.Split時返回的條目數是否有上限?我有一個帶有「1,1,1,1,1,1,1,1,...」的字符串,有600個條目,但是它只返回返回數組中的201個條目。謝謝!字符串分割返回的上限?

編輯: 這只是一行代碼,我在運行時打開了監視器,以確保該字符串仍然有600個逗號/條目。

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

而生成的splitLine數組只包含201個條目。

編輯2: 沒關係,我是一個白癡,無法計數,沒有意識到字符串有601個字符,其中包括逗號和空格。感謝大家!

+0

我剛處理2245項沒有問題。你能顯示代碼嗎?我的猜測是那裏有東西。 – kemiller2002

+2

請將問題與代碼一起發佈,不要只是猜測問題出在哪裏,並且要求確認沒有任何細節。 – Blorgbeard

回答

3

正如你所看到的int 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

正如你可以在這裏看到,拆分方法返回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