基于字符数量的字符串分割

4
string data = "0000062456"

如何将这个字符串分成5段,使得我有以下内容:
part[0] = "00";
part[1] = "00";
part[2] = "06";
part[3] = "24";
part[4] = "56";

请不要在标题中加入标签(C#)。并且,C#没有拆分字符串的功能 - 它是 .NET Framework 中的 System.String 类。这就是为什么我在您的标签中添加了 .NET 的原因。 - John Saunders
4个回答

7

如果您有兴趣了解LINQ解决方案:

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

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


请注意,这仅适用于字符串长度恰好可被提供的子字符串长度(例如,在此示例中为2个字符)整除的情况。在我的情况下,我还需要捕获比其他子字符串更短的最后一个子字符串。更改很容易,但如果没有它,您将比您想要的少一个字符串。 - David Clarke

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));
}

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()));

这种方法的一个好处是它可以保护你免受边缘情况的影响——即使你的字符串长度不能被子字符串的长度整除,它也能按预期工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接