代码之家  ›  专栏  ›  技术社区  ›  melaos

如何在C中拆分此字符串?

  •  4
  • melaos  · 技术社区  · 15 年前

    我真的不习惯C中的split-string方法,我想知道为什么不存在一个以上char函数的split?

    我尝试使用regex在下面拆分这个字符串,但结果却很沮丧。 有人能帮我吗?

    基本上,我想把下面的字符串拆分为

    aa**aa**bb**dd^__^a2a**a2a**b2b**dd^__^
    

    进入之内

    aa**aa**bb**dd
    a2a**a2a**b2b**dd
    

    然后进入

    aa
    aa
    bb
    dd
    
    a2a
    a2a
    b2b
    dd
    

    谢谢!

    7 回复  |  直到 15 年前
        1
  •  10
  •   Oded    15 年前

    您可以使用 string[] . 有几个 overloads .

    string[] splitBy = new string[] {"^__^"};
    string[] result = "aa*aa*bb*dd^__^a2a*a2a*b2b*dd^__^".Split(splitBy, StringSplitOptions.None);
    
    // result[0] = "aa*aa*bb*dd", result[1] = "a2a*a2a*b2b*dd"
    
        2
  •  7
  •   Arjan Einbu    15 年前

    你在找 this overload :

    someString.Split(new string[] { "^__^" }, StringSplitOptions.None);
    

    我不明白为什么没有 String.Split(params string[] separators) .
    但是,可以将其作为扩展方法写入:

    public static string[] Split(this string str, params string[] separators) {
        return str.Split(separators, StringSplitOptions.None);
    }
    
        3
  •  2
  •   sashaeve    15 年前
    var split = @"aa**aa**bb**dd^__^a2a**a2a**b2b**dd^__^".Split(new string[] {"^__^"}, StringSplitOptions.RemoveEmptyEntries);
    
    foreach(var s in split){
       var split2 = s.Split(new string[] {"**"}, StringSplitOptions.RemoveEmptyEntries);
    }
    
        4
  •  1
  •   juharr    15 年前

    这会给你一个 IEnumerable<IEnumerable<string>> 包含所需的值。

    string[] split1 = new[] { "^__^" };
    string[] split2 = new[] { "**" };
    StringSplitOptions op = StringSplitOptions.RemoveEmptyEntries;
    var vals = s.Split(split1,op).Select(p => p.Split(split2,op).Cast<string>());
    

    你也可以扔一些 ToList() 如果你想的话就在里面。 List<List<string>> ToArray() 对于锯齿状阵列

        5
  •  0
  •   Sergio    15 年前

    其中一个怎么样:

    string.Join("**",yourString.Split("^__")).Split("**")
    yourString.Replace("^__","**").Split("**")
    

    您必须检查最后一项,在您的示例中,它是一个空字符串。

        6
  •  0
  •   Jamie Dixon    15 年前

    如前所述,可以将字符串数组传递给split方法。下面是根据您最近对quesiton的编辑,代码的外观:

    string x = "aa**aa**bb**dd^__^a2a**a2a**b2b**dd^__^";
    string[] y =  x.Split(new string[]{"^__^"},StringSplitOptions.None);
    string[] z = y[0].Split(new string[]{"**"},StringSplitOptions.None);
    
        7
  •  0
  •   Black Frog    15 年前

    有效的VB.NET版本。

    模块模块1

    Sub Main()
        Dim s As String = "aa**aa**bb**dd^__^a2a**a2a**b2b**dd^__^"
        Dim delimit As Char() = New Char() {"*"c, "^"c, "_"c}
    
        Dim split As String() = s.Split(delimit, StringSplitOptions.RemoveEmptyEntries)
        Dim c As Integer = 0
        For Each t As String In split
            c += 1
            Console.WriteLine(String.Format("{0}: {1}", c, t))
        Next
    
    End Sub