C#如何按照数字将字符串值拆分

3

字符串值

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

我不太清楚您要表达什么意思,请提供更多上下文内容。
111

00

11

0

1

00

感谢您的选择。

这不是split函数的工作方式。需要自定义逻辑来选择一个字符串列表中分离的1和0。 - Rodrigo
1
请参见:https://dev59.com/kHRB5IYBdhLWcg3wUFrB - Emond
2个回答

12
你可以在从0到1和从1到0的每个变化中间加入一个字符,然后依据该字符进行分割:
string[] result = value.Replace("10", "1,0").Replace("01", "0,1").Split(',');

我想像 111,00,11,0,1,00 这样分割它,只需要找到一个把逗号放在正确位置的方法。太好了... - ahsant
@pwas:这自然不是最有效的方式,但对于任务来说是合适的,因为期望的返回值并不是表示结果的有效方式。更有效的方法是仅返回一个包含每个字符串长度的数组,因为字符串的内容是已知的。 - Guffa

3

这是我的扩展方法,不进行替换 - 只进行解析。

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

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


2
好主意。你不必使用StringBuilder来构建一个包含重复字符的字符串。只需计算出字符数量,然后使用new String(lastchar, cnt)创建要返回的字符串即可。 - Guffa
@Guffa:很好的发现 - 这将节省一些内存和性能。已更改。 - user2160375

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