【问题标题】:What is a more efficient way to only count alphanumeric characters in an array of String?什么是仅计算字符串数组中的字母数字字符的更有效方法?
【发布时间】:2020-10-03 07:01:36
【问题描述】:

我只想计算字符串数组中的字母数字 - 没有空格、标点符号等。

我有这个笨拙的代码:

private int GetCountOfCharsInDoc(string[] _lines)
{
    int iCountOfChars = 0;
    string sLine;
    foreach (string line in _lines)
    {
        sLine = line.Replace(" ", string.Empty);
        sLine = line.Replace(".", string.Empty);
        sLine = line.Replace("?", string.Empty);
        sLine = line.Replace(",", string.Empty);
        sLine = line.Replace(";", string.Empty);
        sLine = line.Replace(":", string.Empty);
        sLine = line.Replace("(", string.Empty);
        sLine = line.Replace(")", string.Empty);
        sLine = line.Replace("'", string.Empty);
        sLine = line.Replace("\"", string.Empty);
        iCountOfChars = iCountOfChars + sLine.Count();
    }
    return iCountOfChars;
}

仅计算字母数字的更好/更有效的方法是什么?

【问题讨论】:

  • 仅供参考,您上面的代码甚至不会按照您期望的方式工作,因为只有替换引号的最后一行实际上在做任何事情。您“删除”的所有其他字符仍然存在,因为每个调用都使用原始的 line 变量,而不是返回的变量 sLine。要解决此问题,请将循环内出现的所有 line 更改为 sLine,但第一个除外。

标签: c# .net counting alphanumeric


【解决方案1】:

使用char.IsLetterOrDigit 方法只获取字母数字,使用CountSystem.Linq 计算它们,最后使用Sum 获取总数。

private int GetCountOfCharsInDoc(string[] _lines)
{
    return _lines.Sum(line => line.Count(char.IsLetterOrDigit));
}

【讨论】:

    【解决方案2】:

    尝试使用Char.IsLetterChar.IsDigit

    _lines.Sum(s => s.Count(c => Char.IsLetter(c) || Char.IsDigit(c)))
    

    或者只是:

    _lines.Sum(s => s.Count(c => Char.IsLetterOrDigit(c)))
    

    【讨论】:

      【解决方案3】:

      或者如果您不想使用 Linq,您可以遍历每个字符并使用 char.IsLetterOrDigit() 进行检查:

      int n = 0;
      foreach (string line in _lines) {
          foreach (char c in line) {
              if (char.IsLetterOrDigit(c)) n++;
          }
      }
      return n;
      

      【讨论】:

        【解决方案4】:

        您可以简单地使用正则表达式从文本中仅提取字母数字,然后计算它。

        代码如下:

         var text = "your string";
         var count = Regex.Replace(text , @"[^a-zA-Z0-9]", "").Count();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-23
          • 2017-05-19
          • 1970-01-01
          • 1970-01-01
          • 2012-01-11
          相关资源
          最近更新 更多