You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QString.split处理多行字符串计数异常,空行统计不符预期求助

问题分析与解决

你的代码出现这种差异的核心原因在于正则表达式\n|$和Qt::SkipEmptyParts的组合逻辑:

  1. 对于字符串Hello\n\n\n\n\n:

    • 正则\n|$会匹配每个换行符和字符串末尾位置,分割后得到的元素是["Hello", "", "", "", "", "", ""](最后一个空元素来自字符串末尾的$匹配)。
    • 启用Qt::SkipEmptyParts后,所有空字符串都会被过滤,最终只剩下["Hello"],所以统计结果为1。
  2. 对于字符串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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 19:02:26