c#按数字拆分字符串值

c#按数字拆分字符串值,c#,string,split,C#,String,Split,字符串值 String value = "11100110100"; 我想按如下所示拆分它 111,00,11,0,1,00 我尝试根据数字进行拆分,如下所示: List<string> result1= value.Split('0').ToList<string>(); List<string> result2= value.Split('1').ToList<string>(); 谢谢。您可以在从0到1和从1到0的每次更改之间放置一个字

字符串值

String value = "11100110100";
我想按如下所示拆分它

111,00,11,0,1,00

我尝试根据数字进行拆分,如下所示:

List<string> result1= value.Split('0').ToList<string>();

List<string> result2= value.Split('1').ToList<string>();

谢谢。

您可以在从0到1和从1到0的每次更改之间放置一个字符,然后在此基础上拆分:

string[] result = value.Replace("10", "1,0").Replace("01", "0,1").Split(',');

这是我的扩展方法,没有替换纯解析

public static IEnumerable<string> Group(this string s)
{
    if (s == null) throw new ArgumentNullException("s");

    var index = 0;
    while (index < s.Length)
    {    
        var currentGroupChar = s[index];
        int groupSize = 1;

        while (index + 1 < s.Length && currentGroupChar == s[index + 1])
        {
            groupSize += 1;
            index += 1;
        }

        index += 1;

        yield return new string(currentGroupChar, groupSize);
    }
}
公共静态IEnumerable组(此字符串为s)
{
如果(s==null)抛出新的ArgumentNullException(“s”);
var指数=0;
while(索引

注意:它适用于每个字符分组(不仅仅是0和1)

这不是拆分的工作方式。需要自定义逻辑来选择字符串列表中分开的1和0。请参阅:好主意。您不需要使用
StringBuilder
来构建重复使用相同字符的字符串。只需计算字符数,然后使用
新建字符串(lastchar,cnt)
创建一个要返回的字符串。@Guffa:捕捉得不错-这将节省一些内存和性能。改变了。+1为了简单起见,事实上答案隐藏在问题中。“我想把它拆分成111,00,11,0,1,00”,只是需要找到一种方法将逗号放在适当的位置。beautiful…@pwas:这当然不是最有效的方法,但适合于任务,因为所需的返回值不是表示结果的有效方法。更有效的方法是只返回一个包含每个字符串长度的数组,因为字符串的内容是已知的。
public static IEnumerable<string> Group(this string s)
{
    if (s == null) throw new ArgumentNullException("s");

    var index = 0;
    while (index < s.Length)
    {    
        var currentGroupChar = s[index];
        int groupSize = 1;

        while (index + 1 < s.Length && currentGroupChar == s[index + 1])
        {
            groupSize += 1;
            index += 1;
        }

        index += 1;

        yield return new string(currentGroupChar, groupSize);
    }
}