c#:如何使用默认空格+一组附加分隔符拆分字符串?

时间:2012-12-06 21:14:10

标签: c# string split

我需要使用一组分隔符字符在C#中分割字符串。此集应包括默认空格(即您String.Split(null, StringSplitOptions.RemoveEmptyEntries)时实际获得的内容)以及我指定的其他字符,如'。',',',& #39 ;;'等等。如果我有一个包含这些附加字符的char数组,如何向其添加所有默认空格,以便将扩展后的数组提供给String.Split?或者是否有更好的方法使用我的自定义分隔符集+空格分割? THX

5 个答案:

答案 0 :(得分:3)

如果您至少使用.NET 2.0,请使用string.Split的适当重载:

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

答案 1 :(得分:2)

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

我还没有找到从String中检索默认空格字符的方法。但是,它们在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"

答案 2 :(得分:1)

str.Split(" .,;".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

答案 3 :(得分:1)

我使用以下内容确保我始终拆分Split的默认空白字符:

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文档,以查看默认情况下拆分的空白字符。

答案 4 :(得分:0)

string[] splitSentence(string sentence)
{
     return sentence
     .Replace(",", " , ")
     .Replace(".", " . ")
     .Split(' ', StringSplitOptions.RemoveEmptyEntries)
} 

string[] result = test.Split(new string[] {"\n", "\r\n"},
                     StringSplitOptions.RemoveEmptyEntries);