基于char号的字符串拆分

时间:2010-05-24 10:48:30

标签: c# .net string split

string data = "0000062456"

如何将这个字符串分成5个部分,以便我有:

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

4 个答案:

答案 0 :(得分:7)

如果您对LINQ解决方案感兴趣:

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

您可以将2替换为您想要的任何数字。

答案 1 :(得分: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 :(得分: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));
}

答案 3 :(得分:0)

这可能对字符串有点过分,因为Substring很方便,但一般的问题是如何将集合拆分为给定大小的子组。图书馆MoreLinq具有以下功能:Batch 它还可以将lambda表达式作为直接转换子组的第二个参数,因此解决方案可以是:

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

以上适用于.Net 4.0。在3.5 Concat需要一个数组,所以我们可以使用ToArray或:

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

这种方法的一个很好的副作用是它可以保护你免受边缘情况的影响 - 即使字符串的长度在子字符串的长度上没有均匀分布,它也会按预期工作。