在 C# 中,我正在制作一个带有行号的简单文本编辑器。我想计算字符串中有效换行符的数量。
我要数数
\r \n \r\n
我怎样才能做到这一点?
或者更好的是,有人可以指点我一篇关于如何为 rtf 框编号的文章
在 C# 中,我正在制作一个带有行号的简单文本编辑器。我想计算字符串中有效换行符的数量。
我要数数
\r \n \r\n
我怎样才能做到这一点?
或者更好的是,有人可以指点我一篇关于如何为 rtf 框编号的文章
注意:这个答案更多地与计算字符串中的行数的抽象任务有关,而不是与 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,但如果文本末尾有换行符则不会)。
计算字符串的出现次数:
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;
}
计数线 - http://ryanfarley.com/blog/archive/2004/04/07/511.aspx
带有行号的 RTB - http://www.xtremedotnettalk.com/showthread.php?s=&threadid=49661&highlight=RichTextBox
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”,则数组中的项数几乎或正好是两倍,因为它在指定它们的顺序。