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

4
我真的不习惯在C#中使用分割字符串方法,我想知道为什么没有多字符分割函数?
我试图使用正则表达式拆分以下字符串,但最终只是导致了挫败感。有人可以帮助我吗?
基本上我想把下面的字符串拆分成:
aa**aa**bb**dd^__^a2a**a2a**b2b**dd^__^

into

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

然后稍后转化为
aa
aa
bb
dd

a2a
a2a
b2b
dd

谢谢!
7个回答

10

你可以使用 string[] 进行分割。有多种 重载方法 可供选择。

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"

7
你正在寻找 这个重载函数
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);
}

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

1
这将会给你一个包含所需值的 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() 来表示一个交错数组。

0

这些中的一个怎么样:

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

你需要检查最后一个项目,在你的例子中它应该是一个空字符串。


0

如前所述,您可以将字符串数组传递给Split方法。根据您最近对问题的编辑,代码可能如下所示:

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

0

可运行的VB.NET版本。

模块Module1

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

这不是他想要做的。 - SLaks

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