2

我需要使用一组分隔符在 C# 中拆分字符串。这个集合应该包括默认的空格(即你在你时有效地得到的String.Split(null, StringSplitOptions.RemoveEmptyEntries))加上我指定的一些额外的字符,比如'.'、','、';'等。所以如果我有一个由这些额外字符组成的 char 数组,如何向其中添加所有默认空格,以便将该扩展数组提供给String.Split?或者有没有更好的方法来使用我的自定义分隔符集 + 空格分割?谢谢

4

5 回答 5

3

string.Split如果您至少在 .NET 2.0 上,只需使用适当的重载:

char[] separator = new[] { ' ', '.', ',', ';' };
string[] parts = text.Split(separator, StringSplitOptions.RemoveEmptyEntries);

我想我因为不完整的答案而被否决了。OP 已经要求一种方法来分割所有空格(在我的电脑上是 25 个),但也被其他分隔符分割:

public static class StringExtensions
{
    static StringExtensions()
    {
        var whiteSpaceList = new List<char>();
        for (int i = char.MinValue; i <= char.MaxValue; i++)
        {
            char c = Convert.ToChar(i);
            if (char.IsWhiteSpace(c))
            {
                whiteSpaceList.Add(c);
            }
        }
        WhiteSpaces = whiteSpaceList.ToArray();
    }

    public static readonly char[] WhiteSpaces;
    public static string[] SplitWhiteSpacesAndMore(this string str, IEnumerable<char> otherDeleimiters, StringSplitOptions options = StringSplitOptions.None)
    {
        var separatorList = new List<char>(WhiteSpaces);
        separatorList.AddRange(otherDeleimiters);
        return str.Split(separatorList.ToArray(), options);
    }
}

现在您可以通过这种方式使用此扩展方法:

string str = "word1 word2\tword3.word4,word5;word6";
char[] separator = { '.', ',', ';' };
string[] split = str.SplitWhiteSpacesAndMore(separator, StringSplitOptions.RemoveEmptyEntries);
于 2012-12-06T21:15:42.180 回答
2

正如您在请求中所述,上面的答案并未使用所有空白字符作为分隔符,仅使用程序指定的分隔符。在上面的解决方案示例中,这只是 SPACE,而不是 TAB、CR、LF 和所有其他 Unicode 定义的空白字符。

我还没有找到从字符串中检索默认空白字符的方法。但是,它们是在 Regex 中定义的,您可以使用它来代替 String。在您的情况下,将句点和逗号添加到正则表达式空白集中:

Regex regex = new Regex(@"[\s\.,]+");   // The "+" will remove blank entries
input = @"1.2 3, 4";
string[] tokens = regex.Split(input);

会产生

tokens[0] "1"
tokens[1] "2"
tokens[2] "3"
tokens[3] "4"
于 2014-11-03T20:15:00.593 回答
1
str.Split(" .,;".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
于 2012-12-06T21:17:17.690 回答
1

我使用类似以下的内容来确保我总是在拆分的默认空白字符上进行拆分:

public static string[] SplitOnWhitespaceAnd(this string value,
    char[] separator, StringSplitOptions options = StringSplitOptions.RemoveEmptyEntries)
    => value.Split().SelectMany(s => s.Split(separator, options)).ToArray();

请注意,为了与 Microsoft 的命名约定保持一致,您应该使用 WhiteSpace 而不是 Whitespace。

请参阅 Microsoft 的Char.IsWhiteSpace文档以查看默认分割的空白字符。

于 2016-10-28T18:39:48.720 回答
0
string[] splitSentence(string sentence)
{
     return sentence
     .Replace(",", " , ")
     .Replace(".", " . ")
     .Split(' ', StringSplitOptions.RemoveEmptyEntries)
} 

或者

string[] result = test.Split(new string[] {"\n", "\r\n"},
                     StringSplitOptions.RemoveEmptyEntries);
于 2012-12-06T21:17:43.640 回答