C# 中所有标点符号/空白字符的现有列表

问题描述 投票:0回答:1

我正在根据所有标点符号和空格字符拆分字符串。我没有构建复杂的 (?) 正则表达式来匹配 C# 认为的“标点符号”和“空白”字符,而是使用

char.IsPunctuation
char.IsWhiteSpace
方法从字符串中获取标点符号/空白字符.

基本上,这就是我正在做的事情 - 构建标点符号和空白字符的数组,稍后我用它来分割字符串。

return text.Where(c => char.IsPunctuation(c) || char.IsWhiteSpace(c))
    .Distinct()
    .ToArray();

我最初这样做是因为我找不到任何地方有 C# 认为标点符号或空格的静态字符列表/数组。在 char.IsPunctuation

 的 MSDN 文档中,它列出了它认为标点符号的 Unicode 代码点,但我的问题是:该列表是否存在于 .NET 代码中的任何位置? 我可以引用它,而不是从输入构建它每次都字符串?
    

c# char whitespace punctuation
1个回答
0
投票
String.Split

,而不是使用

StringBuilder
来处理无穷无尽的字符列表,并在拆分之前使用 LINQ 确定它们(这实际上效率很低)。例如:
public static string[] SplitWhiteSpacesAndPunctuations(string text, StringSplitOptions options = StringSplitOptions.None)
{
    List<string> list = new(Math.Max(text.Length/10, 4));
    StringBuilder sb = new(10);
    foreach (char c in text)
    {
        if (char.IsWhiteSpace(c) || char.IsPunctuation(c))
        {
            AddStringAndClearStringBuilder();
        }
        else
        {
            sb.Append(c);
        }
    }

    AddStringAndClearStringBuilder();

    return list.ToArray();

    void AddStringAndClearStringBuilder()
    {
        if (sb.Length == 0 && options == StringSplitOptions.RemoveEmptyEntries) return;
        list.Add(sb.ToString());
        sb = new StringBuilder();
    }
}

演示:
https://dotnetfiddle.net/3eLI9d

© www.soinside.com 2019 - 2024. All rights reserved.