如何统计RichTextBox中指定标识之间的行数?
统计RichTextBox标识间行数的实现方案
核心思路
- 将RichTextBox的内容按行拆分,得到每行文本的数组
- 定位目标起始标识(如
--BEGIN1)和结束标识(如--END1)的行索引 - 计算两个索引的差值并减1,得到标识间的有效行数(排除标识行本身)
基础实现代码(C# WinForms)
// 获取RichTextBox的所有行 string[] allLines = richTextBox1.Lines; // 统计--BEGIN1与--END1之间的行数 int begin1Idx = Array.IndexOf(allLines, "--BEGIN1"); int end1Idx = Array.IndexOf(allLines, "--END1"); int lineCount1 = (begin1Idx != -1 && end1Idx != -1 && end1Idx > begin1Idx) ? end1Idx - begin1Idx - 1 : -1; // 统计--BEGIN2与--END2之间的行数 int begin2Idx = Array.IndexOf(allLines, "--BEGIN2"); int end2Idx = Array.IndexOf(allLines, "--END2"); int lineCount2 = (begin2Idx != -1 && end2Idx != -1 && end2Idx > begin2Idx) ? end2Idx - begin2Idx - 1 : -1; // 后续可根据lineCount1、lineCount2的值判断数据是否缺失 // 示例:如果预期行数是4,lineCount1 !=4则提示缺失
兼容带空格的标识场景
如果RichTextBox中的标识行可能包含前后空格(比如--BEGIN1),可以改用遍历匹配的方式,避免匹配失败:
string[] allLines = richTextBox1.Lines; int begin1Idx = -1; // 查找--BEGIN1的行索引(忽略前后空格) for (int i = 0; i < allLines.Length; i++) { if (allLines[i].Trim() == "--BEGIN1") { begin1Idx = i; break; } } int end1Idx = -1; // 从BEGIN1之后查找对应的END1 for (int i = begin1Idx + 1; i < allLines.Length && begin1Idx != -1; i++) { if (allLines[i].Trim() == "--END1") { end1Idx = i; break; } } // 计算行数 int lineCount1 = (begin1Idx != -1 && end1Idx != -1) ? end1Idx - begin1Idx - 1 : -1;
说明
- 计算结果为
-1时,说明标识不存在或顺序错误(比如END在BEGIN之前),可自行添加异常提示 - 若需要统计多组标识,可封装成方法循环处理,避免重复代码
内容的提问来源于stack exchange,提问作者Alex Bäumler
相关产品推荐
相关产品推荐

