2010-06-21 88 views
3

我試圖將字符串拆分成許多字符串(列表),每個字符串的最大限制。所以說如果我有500個字符的字符串,並且我希望每個字符串的最大值爲75,那麼將會有7個字符串,並且最後一個字符串不會有完整的75.分割字符串與最大字符數限制

我試過一些我在stackoverflow上找到的例子,但他們'截斷'的結果。有任何想法嗎?

+0

不串有一子的方法? – 2010-06-21 00:27:12

+0

如果你提供了幾個測試用例來證明你在找什麼,它會對我有所幫助。 – 2010-06-21 00:34:41

回答

5

您可以編寫自己的擴展方法做這樣的事情

static class StringExtensions 
{ 
    public static IEnumerable<string> SplitOnLength(this string input, int length) 
    { 
     int index = 0; 
     while (index < input.Length) 
     { 
      if (index + length < input.Length) 
       yield return input.Substring(index, length); 
      else 
       yield return input.Substring(index); 

      index += length; 
     } 
    } 
} 

然後你可以這樣調用

string temp = new string('@', 500); 

string[] array = temp.SplitOnLength(75).ToArray(); 

foreach (string x in array) 
    Console.WriteLine(x); 
1

我會用循環使用C#String.Substring方法解決這個問題。

請注意,這不是確切的代碼,但你明白了。

var myString = "hello world"; 
List<string> list = new List(); 
int maxSize 
while(index < myString.Length()) 
{ 
    if(index + maxSize > myString.Length()) 
    { 
    // handle last case 
    list.Add(myString.Substring(index)); 
    break; 
    } 
    else 
    { 
    list.Add(myString.Substring(index,maxSize)); 
    index+= maxSize; 
    } 
} 
+0

您仍然需要添加最後一個小於75個字符的字符串;) – 2010-06-21 00:32:34

+0

對不起,這是//註釋的用途。我只是在懶惰:) – Alan 2010-06-21 00:35:59

0

我假設可能是分隔符 - 象空間字符。

搜索字符串(instr),直到找到分隔符的下一個位置。

如果這是<您的子字符串長度(75)然後附加到當前子字符串。

如果沒有,則啓動一個新的子字符串。

特殊情況 - 如果整個子字符串中沒有分隔符 - 那麼您需要定義會發生什麼 - 就像添加一個' - '然後繼續。

1

當你說分裂時,你指的是分裂功能?如果沒有,像這樣將工作:

List<string> list = new List<string>(); 
string s = ""; 
int num = 75; 
while (s.Length > 0) 
{ 
    list.Add(s.Substring(0, num)); 
    s = s.Remove(0, num); 
} 
1

我認爲這是一個少許清潔劑比其他答案:

public static IEnumerable<string> SplitByLength(string s, int length) 
    { 
     while (s.Length > length) 
     { 
      yield return s.Substring(0, length); 
      s = s.Substring(length); 
     } 

     if (s.Length > 0) yield return s;    
    } 
0
public static string SplitByLength(string s, int length) 
    { 
     ArrayList sArrReturn = new ArrayList(); 
     String[] sArr = s.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); 
     foreach (string sconcat in sArr) 
     { 
      if (((String.Join(" ", sArrReturn.ToArray()).Length + sconcat.Length)+1) < length) 
       sArrReturn.Add(sconcat); 
      else 
       break; 
     } 
     return String.Join(" ", sArrReturn.ToArray()); 
    } 

    public static string SplitByLengthOld(string s, int length) 
    { 
     try 
     { 
      string sret = string.Empty; 
      String[] sArr = s.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); 
      foreach (string sconcat in sArr) 
      { 
       if ((sret.Length + sconcat.Length + 1) < length) 
        sret = string.Format("{0}{1}{2}", sret, string.IsNullOrEmpty(sret) ? string.Empty : " ", sconcat); 
      } 
      return sret; 
     } 
     catch 
     { 
      return string.Empty; 
     } 
    } 
+0

請嘗試給出任何解釋以及答案代碼。 – Sankarann 2014-02-04 07:17:23

+0

Hi @Sankarann,SplitByLength可用於.NET 4.0+和SplitByLengthOld,適用於所有類型的.NET框架。 – Lorenz 2014-02-04 07:27:42