【问题标题】:Count occurencies number of special chars in string [duplicate]计算字符串中特殊字符的出现次数[重复]
【发布时间】:2020-06-14 17:57:06
【问题描述】:

我有一些这样声明的特殊字符。

private static readonly char[] Chars = "…".ToCharArray();

另外,我可以像这样检查给定字符串中是否存在这些字符。

private static bool ContainsSpecialChars(string text)
    {
        return text.IndexOfAny(Chars) >= 0;
    }

但我一直在计算给定字符串中有多少次出现。

注意:我有字符数组

【问题讨论】:

  • 将文本更改为字符数组,使用Count 和谓词检查Chars 是否包含给定字符text.ToCharArray().Count(c => Chars.Contains(c))
  • hmm 我不认为它是否重复“你将如何计算字符串中字符串(实际上是字符)的出现次数?”

标签: c# .net char


【解决方案1】:

尝试使用 Linq。对于任意特殊chars

 private static readonly HashSet<char> SpecialChars = new HashSet<char>() {
   //TODO: put all special chars here
   '.', '#', '?',
 };

 ...

 private static bool ContainsSpecialChars(string text) => 
   text != null && text.Any(c => SpecialChars.Contains(c));

 private static int CountSpecialChars(string text) => 
   text?.Count(c => SpecialChars.Contains(c)) ?? 0;

如果 special char 实际上表示某种 Unicode 类别(例如标点符号),请尝试使用 char 静态方法:

 private static bool ContainsSpecialChars(string text) => 
   text != null && text.Any(c => char.IsPunctuation(c));

 private static int CountSpecialChars(string text) => 
   text?.Count(c => char.IsPunctuation(c)) ?? 0;

【讨论】:

  • 谢谢,效果很好,是否可以在Count方法中添加out参数?
  • @hoozr: 从技术上讲,是的,但我们为什么要在Count 中添加out 参数?它应该返回什么?
  • 没有我可以使用这个:if(CountSpecialChars(string, out int num) &gt; 0) count += num
  • @hoozr:在当前的实现中,如果string 没有特殊字符,我们有0;这就是为什么我们根本不想要numifcount += CountSpecialChars(string);。如果string 没有 特殊字符,我们将0 添加到count,这不会改变任何内容
  • 完美,谢谢! Idk,我无法标记您的用户名,当我发表评论时它就像消失了一样。
【解决方案2】:

你可以试试

Chars.ToList().ForEach(x =>
{
    if (toCheck.Contains(x))
       charOccur.Add(x, toCheck.ToList<char>().FindAll(word => word == x).Count);
});

根据@Selvins 评论,您也可以将上面的代码更改为

Chars.ToList().ForEach(x =>
{
   if (toCheck.Contains(x))
       charOccur.Add(x, toCheck.ToCharArray().Count(c => Chars.Contains(c)));
});

【讨论】:

    猜你喜欢
    • 2012-05-31
    • 2011-03-02
    • 2011-07-08
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    相关资源
    最近更新 更多