如何从QStringList中移除空字符串及Null字符串?
清理QStringList中的空/Null字符串的最简方法
嘿,这个问题我太熟悉了!Qt确实没给QStringList专门加个一键清理空和Null字符串的快捷函数,但有几种超简洁的实现方式,给你列两个最实用的:
1. 原地修改(高效首选)
用C++标准库的erase-remove_if组合,这是容器元素移除的经典玩法,原地修改原列表,不用额外内存,效率拉满:
// 假设你的QStringList名为myStringList myStringList.erase( std::remove_if(myStringList.begin(), myStringList.end(), [](const QString& str) { return str.isNull() || str.isEmpty(); }), myStringList.end() );
原理很简单:std::remove_if会把所有符合条件(isNull或isEmpty)的元素移到列表末尾,erase再把这些“待删除”的元素从容器里彻底删掉。
2. 生成新列表(保留原数据)
如果不想改动原列表,想直接得到清理后的新列表,用Qt的QStringList::filter配合lambda表达式就很方便:
QStringList cleanedList = myStringList.filter( [](const QString& str) { return !str.isNull() && !str.isEmpty(); } );
这个写法更直观,直接过滤出所有非空且非Null的元素,返回新列表。
兼容旧Qt版本的写法
如果你的Qt版本低于5.12(lambda不能直接传给filter),可以用正则表达式替代,不过不如lambda精准:
QStringList cleanedList = myStringList.filter(QRegExp(".+"));
注意:这个正则会过滤掉空字符串,但对Null字符串也有效,因为isNull的QString本质上也是无有效字符的。
内容的提问来源于stack exchange,提问作者ymoreau
相关产品推荐
相关产品推荐

