QString.split处理多行字符串计数异常,空行统计不符预期求助
问题分析与解决
你的代码出现这种差异的核心原因在于正则表达式\n|$和Qt::SkipEmptyParts的组合逻辑:
对于字符串
Hello\n\n\n\n\n:- 正则
\n|$会匹配每个换行符和字符串末尾位置,分割后得到的元素是["Hello", "", "", "", "", "", ""](最后一个空元素来自字符串末尾的$匹配)。 - 启用
Qt::SkipEmptyParts后,所有空字符串都会被过滤,最终只剩下["Hello"],所以统计结果为1。
- 正则
对于字符串
Hello\n\n\n\n\nBye:- 分割后得到的元素是
["Hello", "", "", "", "", "Bye", ""],Qt::SkipEmptyParts过滤掉空字符串后应该得到["Hello", "Bye"](size=2),你提到的结果为6大概率是误把未启用Qt::SkipEmptyParts时的结果当成了启用后的情况。
- 分割后得到的元素是
正确的行数统计方案
如果你需要统计包括空行在内的总行数,直接用换行符\n分割即可,不需要添加$,也不要用Qt::SkipEmptyParts:
QStringList lines = m_text.split('\n'); qDebug() << lines.size();
- 对于
Hello\n\n\n\n\n,会得到6个元素(对应6行:1行Hello + 5行空行); - 对于
Hello\n\n\n\n\nBye,会得到6个元素(对应6行:1行Hello + 4行空行 + 1行Bye)。
如果你需要统计空行的数量(即非空行之外的行数),可以这样处理:
QStringList lines = m_text.split('\n'); int emptyLineCount = 0; for (const QString& line : lines) { if (line.isEmpty()) { emptyLineCount++; } } qDebug() << emptyLineCount;
- 对于
Hello\n\n\n\n\n,空行数量为5,符合你的预期。
内容的提问来源于stack exchange,提问作者coterobarros
相关产品推荐
相关产品推荐

