QStringList从字符串中删除空格

时间:2011-07-21 14:41:33

标签: c++ string qt

修剪字符串列表中所有字符串的最佳方法是什么?我尝试使用replaceInStrings:

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

但未删除空格。

5 个答案:

答案 0 :(得分:7)

QRegExp("^\s*")

\是特殊符号,因此当您需要将斜杠插入字符串时必须使用\\

QRegExp("^\\s*")

答案 1 :(得分:5)

另一个答案已经告诉过,你需要逃避反斜杠。您还希望更改表达式以匹配一个或多个空格而不是0或更多空格,请尝试使用: QRegExp( “^ \\ S +”)

答案 2 :(得分:0)

如果可以使用C ++ 11 (qt5 qmake项目文件:CONFIG += c++11),请尝试以下简短代码段:

QStringList somelist;
// fill list
for(auto& str : somelist)
    str = str.trimmed();

它将通过引用运行列表,trimmed函数调用结果将被分配回原始列表中的项目。

不使用C ++ 11 ,您可以将Qt方法与Java样式的可变迭代器一起使用:

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(); 

}

删除有效,see the Qt java-style iterator docs

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:-1)

QStringList somelist;

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