QStringList 去除字符串中的空格

5

如何最好地对字符串列表中的所有字符串进行修剪?我尝试使用replaceInStrings:

QStringList somelist;
// ... //
// add some strings
// ... //
somelist.replaceInStrings(QRegExp("^\s*"),"");

但是空格没有被删除。

5个回答

7
QRegExp("^\s*")

\ 是一个特殊符号,所以当你需要在字符串中插入反斜杠时,必须使用\\

QRegExp("^\\s*")

5

正如其他答案所说,您需要转义反斜杠。您还需要更改表达式以匹配一个或多个空格而不是0个或多个空格,请尝试使用: QRegExp("^\\s+")


2
如果您能够使用C++11 (qt5 qmake项目文件:CONFIG += c++11),那么请尝试以下简短的代码片段:
QStringList somelist;
// fill list
for(auto& str : somelist)
    str = str.trimmed();

它将通过引用运行列表,并将trimmed函数调用结果分配回原始列表中的项目。 如果没有使用C++11,您可以使用具有Java风格的Qt方法和可变迭代器:
QMutableListIterator<QString> it(somelist);
while (it.hasNext()) {
    it.next();
    it.value() = it.value().trimmed();
}

后一种方法非常完美,如果您想在修剪后删除空字符串。
QMutableListIterator<QString> it(somelist);
while (it.hasNext()) {
    it.next();
    it.value() = it.value().trimmed();
    if (it.value().length() == 0)
        it.remove(); 

}

删除是有效的,请查看Qt Java风格迭代器文档

0

Trimming 意味着删除字符串前面和末尾的空格。到目前为止,所有的解决方案都只删除了前面的空格。

这里是真正的修剪解决方案:

str_list.replaceInStrings(QRegExp("^\\s+|\\s+$"), "");

-1
QStringList somelist;

for(int i = 0; i < somelist.size(); ++i) {
    QString item = static_cast<QString>(somelist[i]).trimmed()
}

3
这段代码或许可以解决问题,但它并没有说明回答这个问题的原因或方式。请包含一份代码解释(//meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers),因为这真的有助于提高您的帖子质量。要记住,您正在为未来的读者回答问题,而这些人可能不知道您建议代码的原因。举报者/审核员:对于仅包含代码的答案,请降低其投票,而不是删除! - Scott Weldon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接