C#计算换行和回车的所有出现次数

时间:2009-06-03 16:28:19

标签: c# count richtextbox

在C#中,我正在制作一个带行号的简单文本编辑器。我想计算字符串中有效换行符的数量。

我想算数

\ r \ n \ r \ n

我该怎么做?

或者更好的是,有人可以指点我一篇关于如何编号rtf框的文章

5 个答案:

答案 0 :(得分:4)

注意:这个答案更多的是与字符串中的行计数的抽象任务,而不是与GUI方面的事情有关。它可能没有原始提问者的其他答案那么有用,但我怀疑它在不涉及GUI的类似情况下很有用。如果有足够的人认为它在这里不相关,我会删除它。

我会使用已经知道行结尾的现有类型,即TextReader,并结合MiscUtil中的LineReader类型:

string text = "ab\ncd";
int lines = new LineReader(() => new StringReader(text)).Count();

或者,没有依赖项:

public IEnumerable<string> GetLines(string text)
{
    using (TextReader reader = new StringReader(text))
    {
        string line;
        while ((line = reader.ReadLine()) != null)
        {
            return line;
        }
    }
}

然后:

int lineCount = GetLines(text).Count();

请注意,这将计算实际的文本行而不是换行符 - 这可能与您想要的略有不同(例如,它通常是换行符+ 1,但如果文本末尾有换行符则不会)。

答案 1 :(得分:2)

计算字符串的出现次数:

public static int CountStringOccurrences(string text, string pattern)
        {
            // Loop through all instances of the string 'text'.
            int count = 0;
            int i = 0;
            while ((i = text.IndexOf(pattern, i)) != -1)
            {
                i += pattern.Length;
                count++;
            }
            return count;
        }

答案 2 :(得分:2)

答案 3 :(得分:0)

答案 4 :(得分:0)

public static int LineBreakCount(string s)
{
    if (s == null) throw new ArgumentNullException("s");

    return LineBreakCount(s, new[]{"\r\n", "\r", "\n"});
}

public static int LineBreakCount(string s, params string[] patterns)
{
    if (s == null) throw new ArgumentNullException("s");
    if (patterns == null) throw new ArgumentNullException("patterns");

    return s.Split(patterns, StringSplitOptions.None).Length;
}

第一次重载中模式的顺序很重要,因为如果首先执行“\ r”或“\ n”,那么数组中的项目几乎或两倍都会结束,因为它执行他们按照他们指定的顺序。