2011-07-21 265 views
4

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

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

但未删除空格。

回答

4

象前面说,你需要转义反斜线另一个答案必须使用\\。你也想改变表达式匹配一个或多个空格,而不是0或多个空格,请尝试使用: QRegExp(“^ \\ S +”)

7
QRegExp("^\s*") 

\是特殊符号,所以当你需要插入斜线为字符串

QRegExp("^\\s*") 
-1
QStringList somelist; 

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

虽然此代码片段可能会解决问题,但它并不能解释为什么或如何回答问题。请[请为您的代码添加解释](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers),因为这确实有助于提高帖子的质量。请记住,您将来会为读者回答问题,而这些人可能不知道您的代码建议的原因。 **举报人/评论者:** [仅限代码解答,例如downvote,请勿删除!](// meta.stackoverflow.com/a/260413/2747593) –

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