2011-07-21 328 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