You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中是否存在标点与空白字符的.NET静态可引用列表?

问题

我需要按C#认定的标点和空白字符拆分字符串,目前没有使用复杂正则,而是通过char.IsPunctuation和char.IsWhiteSpace方法从输入字符串中提取标点/空白字符,生成去重后的字符数组用于拆分。想请教:.NET代码中是否存在C#认定的标点和空白字符的静态列表,可直接引用以替代每次从输入字符串生成的操作?

回答

.NET框架并没有直接暴露char.IsPunctuation和char.IsWhiteSpace所判定的全部字符的静态集合。原因在于这两个方法是基于Unicode标准实现的,.NET会随版本更新适配不同的Unicode版本,对应的字符范围是动态变化的,不会硬编码一个固定的静态列表。

如果需要替代每次从输入字符串提取的操作,可以参考以下两种方案:

  • 自定义常用字符集合:如果你的业务场景只需要覆盖常见的标点和空白字符(比如空格、逗号、句号、制表符等),可以直接定义一个静态只读数组,这样性能最优,示例如下:
    public static class CommonSeparators
    {
        public static readonly char[] PunctuationAndWhiteSpace = { ' ', '\t', '\n', '\r', ',', '.', '!', '?', ';', ':' };
    }
    
  • 预生成全量符合条件的字符集合:如果必须严格匹配char.IsPunctuation和char.IsWhiteSpace的所有字符,可以在程序启动时一次性生成并缓存这个集合,后续复用即可。示例代码如下:
    public static class UnicodeCharSets
    {
        public static readonly HashSet<char> PunctuationAndWhiteSpace = new HashSet<char>();
    
        static UnicodeCharSets()
        {
            // 遍历所有Unicode字符,筛选符合条件的项
            for (char c = char.MinValue; c <= char.MaxValue; c++)
            {
                if (char.IsPunctuation(c) || char.IsWhiteSpace(c))
                {
                    PunctuationAndWhiteSpace.Add(c);
                }
            }
        }
    }
    
    之后拆分字符串时,直接使用这个预生成的集合作为分隔符来源即可,无需每次从输入字符串提取去重。

内容的提问来源于stack exchange,提问作者CarenRose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 05:38:19