1

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

我要数数

\r \n \r\n

我怎样才能做到这一点?

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

4

5 回答 5

4

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

我将使用已经知道行尾的现有类型,即TextReader与我的MiscUtilLineReader类型结合使用:

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,但如果文本末尾有换行符则不会)。

于 2009-06-03T16:45:27.937 回答
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;
        }
于 2009-06-03T16:33:18.480 回答
2

CodeProject上有关于此的文章:

.NET 2.0 中 RichTextBox 的行号

.NET 2.0 中 RichTextBox 的编号行

RichTextBox 的行号

于 2009-06-03T16:33:49.540 回答
1

计数线 - http://ryanfarley.com/blog/archive/2004/04/07/511.aspx

带有行号的 RTB - http://www.xtremedotnettalk.com/showthread.php?s=&threadid=49661&highlight=RichTextBox

于 2009-06-03T16:33:50.087 回答
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”,则数组中的项数几乎或正好是两倍,因为它在指定它们的顺序。

于 2009-06-03T16:48:43.253 回答