在C#中,我正在制作一个带行号的简单文本编辑器。我想计算字符串中有效换行符的数量。
我想算数
\ r \ n \ r \ n
我该怎么做?
或者更好的是,有人可以指点我一篇关于如何编号rtf框的文章
答案 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)
CodeProject上有关于此的文章:
Line Numbering of RichTextBox in .NET 2.0
答案 3 :(得分:0)
计算行数 - http://ryanfarley.com/blog/archive/2004/04/07/511.aspx
带行号的RTB - http://www.xtremedotnettalk.com/showthread.php?s=&threadid=49661&highlight=RichTextBox
答案 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”,那么数组中的项目几乎或两倍都会结束,因为它执行他们按照他们指定的顺序。