2010-05-24 180 views
4
string data = "0000062456" 

如何讓我有這個字符串5個分裂:字符串分割基於字符數

part[0] = "00"; 
part[1] = "00"; 
part[2] = "06"; 
part[3] = "24"; 
part[4] = "56"; 
+0

請不要在標題(C#)中添加標籤。另外,C#沒有工具來拆分字符串 - 它是.NET Framework中的'System.String'類。這就是爲什麼我將.NET添加到您的標籤。 – 2010-05-24 19:35:54

回答

4

使用Substring(int32, int32)

part[0] = myString.Substring(0,2); 
part[1] = myString.Substring(2,2); 
part[2] = myString.Substring(4,2); 
part[3] = myString.Substring(6,2); 
part[4] = myString.Substring(8,2); 

這當然可以很容易地轉換成一個函數,使用索引你需要的子串來自:

string getFromIndex(int arrIndex, int length) 
{ 
    return myString.Substring(arrIndex * 2, length); 
} 

如果您確實想要看中,也可以創建擴展方法。

public static string getFromIndex(this string str, int arrIndex, int length) 
{ 
    return str.Substring(arrIndex * 2, length); 
} 
2

編輯:錯誤的語言

string str = "0000062456"; 
List<string> parts = new List<string>(); 
for (Int32 i = 0; i <= (str.Length/2 - 1); i++) 
{ 
    parts.Add(str.Substring(i * 2, 2)); 
} 
7

如果你有興趣在一個LINQ的解決方案:

IEnumerable<string> result = Enumerable 
    .Range(0, s.Length/2) 
    .Select(i => s.Substring(i * 2, 2)); 

在那裏你可以通過任何數量的你想更換2

+0

請注意,這隻適用於可以被提供的子字符串長度整除的字符串(示例中爲2個字符)。在我的情況下,我還需要捕獲比其他人短的最後一個子字符串。改變很簡單,但如果沒有它,你會有比你想要的更少的字符串。 – 2011-03-17 03:41:35

0

對於一個字符串來說,這可能有點矯枉過正,因爲Substring已經夠用了,但一般的問題是如何將一個集合拆分成給定大小的子組。圖書館MoreLinq有這樣的功能:Batch
它也可以採取一個lambda表達式以直接子組轉換的第二個參數,所以一個解決方案可以是:

IEnumerable<string> parts = str.Batch(2, String.Concat); 

上述工作對於.NET 4.0。在3.5的毗連需要一個數組,所以我們可以使用ToArray或:

IEnumerable<string> parts = str.Batch(2, chars => new String(chars.ToArray())); 

這種方法的一個很好的副作用是,它可以保護你免受邊緣的情況下 - 如預期它會工作,即使你的字符串的長度沒有按」在子串的長度上均勻分配。