Qt中含多个相同分隔符时如何用split方法拆分QString为指定两部分
实现方法
核心靠QString::split的最大拆分次数参数控制拆分边界,只在第一个匹配到分隔符的位置切分,简单处理后就能得到目标结果,完全不需要手动遍历或者从末尾反向匹配。
注意:Qt 5.15、Qt 6全版本的split方法原生支持
maxSplit入参,用来限制最多拆分多少次,是实现这个需求最直接的方式。
代码实现
// 原始字符串和分隔符 const QString origin = "123abc1234567890abc9876543210"; const QString delimiter = "abc"; // 传入*maxSplit=1*,代表最多拆分1次,最终返回2个元素 // 第二个元素会直接保留第一个分隔符之后的所有内容,包括内部后续出现的分隔符 QStringList splitRes = origin.split( delimiter, Qt::KeepEmptyParts, Qt::CaseSensitive, 1 ); // split默认会移除分隔符,所以给第一段补回分隔符就符合要求 if (splitRes.size() == 2) { splitRes[0].append(delimiter); }
运行结果
最终splitRes存储的两个元素完全匹配需求:
- 索引0内容:
123abc - 索引1内容:
1234567890abc9876543210
不会出现匹配最后一个分隔符拆分的问题。
低版本Qt兼容写法
如果使用5.15以下没有maxSplit参数的Qt版本,基于split返回结果做简单拼接即可,不需要额外调用查找类方法:
const QString origin = "123abc1234567890abc9876543210"; const QString delimiter = "abc"; QStringList splitRes = origin.split(delimiter); if (splitRes.size() >= 2) { // 把第一个分段之后的所有拆分结果用分隔符重新拼接,得到完整后半段 QString tailPart = splitRes.mid(1).join(delimiter); splitRes = QStringList{splitRes[0] + delimiter, tailPart}; }
内容的提问来源于stack exchange,提问作者Scars
相关产品推荐
相关产品推荐

