【问题标题】:string splitting based on char number基于字符数的字符串拆分
【发布时间】:2010-05-24 10:48:30
【问题描述】:
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 添加到您的标签的原因。

标签: c# .net string split


【解决方案1】:

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

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

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

【讨论】:

  • 请注意,这仅适用于完全可被提供的子字符串长度整除的字符串(示例中为 2 个字符)。就我而言,我还需要捕获最后一个比其他子字符串短的子字符串。更改很简单,但如果没有它,您将获得比您想要的更少的字符串。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    编辑:语言错误

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

    【讨论】:

      【解决方案4】:

      这对于字符串来说可能有点矫枉过正,因为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()));
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-28
        • 2019-05-08
        • 1970-01-01
        • 2016-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-13
        相关资源
        最近更新 更多