【问题标题】:how to count Enter in a string? [duplicate]如何计算输入字符串? [复制]
【发布时间】:2012-11-30 21:43:31
【问题描述】:

可能重复:
How would you count occurences of a string within a string (C#)?

我有一个包含多个子字符串的字符串,它们之间有 Enter(按 Enter 键的特殊字符)。

你能指导我如何编写一个计算单词之间输入键的正则表达式吗?

谢谢

【问题讨论】:

  • 为什么需要一个正则表达式来计算一个字符在字符串中出现的次数?那是矫枉过正。只是以其他方式计算字符。遍历字符。或者也许有一个库函数。
  • “输入”是"\r\n" (CRLF)、"\n" (LF) 还是"\r" (CR)?
  • "嘿,我有一个与字符串有关的问题。我必须需要一个正则表达式。"
  • 这里有很多方法:stackoverflow.com/questions/541954/…

标签: c# .net regex vb.net


【解决方案1】:

根据使用的换行符,您可能需要更改为 \r\n

var numberLineBreaks = Regex.Matches(input, @"\r\n").Count;

【讨论】:

  • 谢谢,它对我有用。我真的需要这个。
【解决方案2】:

您不需要正则表达式,您只是在计算字符串。具体来说,您只是在数Environment.Newlines。有很多方法可以做到这一点; this SO answer 中描述了几个。这是一个看起来效率低下但性能出奇的好:

int count1 = source.Length - source.Replace(Environment.Newline, "").Length;

【讨论】:

    【解决方案3】:

    必须是正则表达式吗?可能有更简单的方法...例如,您可以使用 string[] array = String.Split('\n'); 创建子字符串数组,然后使用 array.Length; 获取计数

    【讨论】:

    • 你可能需要从结果中减去一个。
    • 这将非常低效和浪费,因为 OP 只需要计数。
    【解决方案4】:

    您可以使用此代码,

    using System;
    using System.Text.RegularExpressions;
    
    class Program
        {
            static void Main()
            {
             long a = CountLinesInString("This is an\r\nawesome website.");
             Console.WriteLine(a);
    
             long b = CountLinesInStringSlow("This is an awesome\r\nwebsite.\r\nYeah.");
             Console.WriteLine(b);
             }
    
             static long CountLinesInString(string s)
             {
              long count = 1;
              int start = 0;
              while ((start = s.IndexOf('\n', start)) != -1)
              {
                  count++;
                   start++;
              } 
              return count;
             }
    
             static long CountLinesInStringSlow(string s)
             {
              Regex r = new Regex("\n", RegexOptions.Multiline);
              MatchCollection mc = r.Matches(s);
              return mc.Count + 1;
             }
     }
    

    【讨论】:

      【解决方案5】:

      你可以通过简单地计算换行符来做到这一点:

      int start = -1;
      int count = 0;
      while ((start = text.IndexOf(Environment.NewLine, start + 1)) != -1)
          count++;
      return count;
      

      【讨论】:

        猜你喜欢
        • 2013-10-03
        • 2021-05-19
        • 1970-01-01
        • 2018-06-17
        • 1970-01-01
        • 2014-09-30
        • 1970-01-01
        • 1970-01-01
        • 2019-06-20
        相关资源
        最近更新 更多