目錄
一、QString去掉空格
1. 移除字符串首尾的空格(trimmed)
2. 移除字符串中的所有空格(remove)
3. 僅移除左側(開頭)或右側(結尾)空格
4. 替換多個連續空格為單個空格
5. 移除特定位置的空格
總結
二、QStringList去掉空格
方法 1:使用?removeIf?+?trimmed(推薦,Qt 5.7+)
方法 2:使用?filter?保留非空字符串(不修改原列表)
方法 3:遍歷手動過濾(兼容所有 Qt 版本)
方法 4:僅移除嚴格空字符串("")
關鍵區別總結
額外場景:同時移除首尾空格
一、QString去掉空格
在 Qt 中,QString
?提供了多種方法來移除空格,具體取決于你想移除?所有空格、首尾空格,還是?特定位置的空格。以下是幾種常見的方法:
1. 移除字符串首尾的空格(trimmed
)
QString str = " Hello, World! ";
QString trimmedStr = str.trimmed(); // 移除首尾空格
// 結果:"Hello, World!"
qDebug() << trimmedStr;
適用場景:
-
清理用戶輸入(如登錄表單)。
-
處理文件讀取的行數據。
2. 移除字符串中的所有空格(remove
)
QString str = " Qt is great! ";
QString noSpacesStr = str.remove(' '); // 移除所有空格
// 結果:"Qt is great!"
qDebug() << noSpacesStr;
適用場景:
-
處理需要無空格的字符串(如 URL、文件名)。
-
數據清洗(如 CSV 文件處理)。
3. 僅移除左側(開頭)或右側(結尾)空格
QString str = " Left and Right ";
QString leftTrimmed = str.trimmed().prepend("X"); // 先trim再操作
// 或者手動實現:
while (str.startsWith(' ')) {str.remove(0, 1); // 移除左側空格
}
while (str.endsWith(' ')) {str.chop(1); // 移除右側空格
}
// 結果:"Left and Right"
qDebug() << str;
適用場景:
-
需要單獨處理左側或右側空格的情況。
4. 替換多個連續空格為單個空格
QString str = "Too many spaces";
str = str.simplified(); // 替換連續空格為單個,并trim首尾
// 結果:"Too many spaces"
qDebug() << str;
適用場景:
-
規范化文本(如用戶輸入的文章內容)。
5. 移除特定位置的空格
QString str = "A B C D";
str.remove(2, 1); // 移除位置2的1個字符(空格)
// 結果:"AB C D"
qDebug() << str;
適用場景:
-
精確控制刪除某個位置的字符。
總結
方法 | 功能 | 示例 |
---|---|---|
trimmed() | 移除首尾空格 | " Hi " ?→?"Hi" |
remove(' ') | 移除所有空格 | "A B C" ?→?"ABC" |
simplified() | 替換連續空格為1個并trim | " A B " ?→?"A B" |
remove(index, count) | 移除指定位置的空格 | "A B C" ?→?"AB C" |
-
清理用戶輸入?→?
trimmed()
?或?simplified()
-
生成無空格字符串(如URL)?→?
remove(' ')
-
精確控制空格刪除?→?
remove(index, count)
二、QStringList去掉空格
在 Qt 中,要從?QStringList
?中移除空字符串或僅包含空格的字符串,可以使用以下幾種方法:
方法 1:使用?removeIf
?+?trimmed
(推薦,Qt 5.7+)
QStringList list = {"apple", "", " ", "banana", " cherry "};// 移除所有空字符串或僅含空格的字符串(原地修改)
list.removeIf([](const QString& str) {return str.trimmed().isEmpty();
});// 結果:["apple", "banana", " cherry "]
qDebug() << list;
特點:
-
直接修改原列表,高效簡潔。
-
需要 C++11 支持(Qt 5 默認啟用)。
方法 2:使用?filter
?保留非空字符串(不修改原列表)
QStringList list = {"apple", "", " ", "banana", "cherry"};// 返回新列表,保留非空字符串
QStringList filteredList = list.filter([](const QString& str) {return !str.trimmed().isEmpty();
});// 結果:["apple", "banana", "cherry"]
qDebug() << filteredList;
適用場景:
-
需要保留原列表時使用。
-
同樣需要 C++11。
方法 3:遍歷手動過濾(兼容所有 Qt 版本)
QStringList list = {"apple", "", " ", "banana", "cherry"};
QStringList result;for (const QString& str : list) {if (!str.trimmed().isEmpty()) {result.append(str);}
}// 結果:["apple", "banana", "cherry"]
qDebug() << result;
特點:
-
兼容 Qt 4.x 和舊編譯器。
-
代碼稍顯冗長,但邏輯清晰。
方法 4:僅移除嚴格空字符串(""
)
QStringList list = {"apple", "", " ", "banana"};
list.removeAll(""); // 僅移除 "",不移除 " "// 結果:["apple", " ", "banana"]
qDebug() << list;
注意:
-
僅移除?
""
,不會處理含空格的字符串(如?" "
)。
關鍵區別總結
方法 | 是否修改原列表 | 能否移除?" " | 所需 Qt 版本 |
---|---|---|---|
removeIf | ? 是 | ? 是 | Qt 5.7+ |
filter | ? 否 | ? 是 | Qt 5+ |
遍歷過濾 | ? 否 | ? 是 | 所有版本 |
removeAll("") | ? 是 | ? 否 | 所有版本 |
額外場景:同時移除首尾空格
如果希望移除字符串內部空格,可結合?QString::remove()
:
QStringList list = {"apple", " banana ", "cherry"};
for (QString& str : list) {str = str.remove(' '); // 移除所有空格
}
// 結果:["apple", "banana", "cherry"]
-
現代 Qt 項目?→?
removeIf
(代碼簡潔,原地修改) -
需要兼容性?→?遍歷過濾(通用可靠)
-
僅需移除?
""
?→?removeAll
(最簡單)