【QT】QString和QStringList去掉空格的方法總結

目錄

一、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"]
  1. 現代 Qt 項目?→?removeIf(代碼簡潔,原地修改)

  2. 需要兼容性?→?遍歷過濾(通用可靠)

  3. 僅需移除?""?→?removeAll(最簡單)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/82421.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82421.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/82421.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

電腦 IP 地址修改工具,輕松實現異地登陸

在互聯網時代&#xff0c;異地登陸需求日益頻繁 —— 訪問區域限制內容、跨區協作、優化游戲體驗等場景&#xff0c;都需要通過修改 IP 地址實現。 一、IP 地址基礎認知 IP 地址是設備的網絡身份標識&#xff0c;不同地區分配不同 IP 段。通過修改 IP&#xff0c;可模擬目標地…

[BUG]Debian/Linux操作系統中 安裝 curl等軟件顯示無候選安裝(E: 軟件包 curl 沒有可安裝候選)

本文內容組織形式 問題描述失效原因解決方案首先修改源列表為國內確認當前系統的版本Debian 11 (Bullseye)Debian 12 (Bookworm) 執行系統升級更新系統重新安裝curl 結語 問題描述 日期&#xff1a;20250526 操作系統&#xff1a; debian darkchunkdebian:/home$ sudo apt i…

leetcode hot100刷題日記——12.反轉鏈表

解答&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(n…

JavaSE核心知識點04工具04-01(JDK21)

&#x1f91f;致敬讀者 &#x1f7e9;感謝閱讀&#x1f7e6;笑口常開&#x1f7ea;生日快樂?早點睡覺 &#x1f4d8;博主相關 &#x1f7e7;博主信息&#x1f7e8;博客首頁&#x1f7eb;專欄推薦&#x1f7e5;活動信息 文章目錄 JavaSE核心知識點04工具04-01&#xff08;JD…

數據庫入門:以商品訂單系統為例

數據庫入門&#xff1a;以商品訂單系統為例 一、前言 數據庫是現代軟件開發中不可或缺的基礎&#xff0c;掌握數據庫的基本概念和操作&#xff0c;是每個開發者的必經之路。本文將以“商品-品牌-客戶-訂單-訂單項”為例&#xff0c;帶你快速入門數據庫的核心知識和基本操作。…

UE失落方舟特效學習 筆記01

通過法線扭曲貼圖 Begin Object Class/Script/UnrealEd.MaterialGraphNode Name"MaterialGraphNode_0" ExportPath"/Script/UnrealEd.MaterialGraphNode/Engine/Transient.M_RadialUV_01:MaterialGraph_0.MaterialGraphNode_0"Begin Object Class/Script/E…

跨境支付風控失效?用代理 IP 構建「地域 - 設備 - 行為」三維防護網

針對跨境支付風控失效問題&#xff0c;結合代理IP技術構建「地域-設備-行為」三維防護網是當前最有效的解決方案。以下是基于最新實踐的技術路徑與策略指南&#xff1a; 一、地域維度&#xff1a;IP地理特征精準匹配 IP屬地真實性驗證 優先選擇住宅代理IP&#xff08;Residenti…

AI的“軟肋”:架構設計與業務分析的壁壘

盡管人工智能&#xff08;AI&#xff09;在代碼生成、數據分析等方面取得了顯著進展&#xff0c;但在架構設計和業務分析的核心領域&#xff0c;人類的智慧和經驗仍然是不可替代的。這些領域往往涉及高度的抽象思維、戰略遠見、對復雜商業邏輯的深刻理解以及在模糊不清的環境中…

【Redis實戰篇】基于Redis的功能實現附近商鋪查詢(Geo),用戶簽到與統計(Bitmap),網站UV統計(HyperLogLog)

文章目錄 附近商鋪GEOSEARCH 實現語法參數解釋 GEORADIUS 實現基本語法參數詳解必選參數可選參數參數詳解必選參數 代碼實現 用戶簽到BitmapRedis 中 Bitmap 基本操作1. 設置位值2. 獲取位值3. 統計位值為 1 的數量4. 位圖運算 Spring Data Redis 中操作 Bitmap1. 操作示例(1) …

【C++高階一】二叉搜索樹

【C高階一】二叉搜索樹剖析 1.什么是二叉搜索樹2.二叉搜索樹非遞歸實現2.1插入2.2刪除2.2.1刪除分析一2.2.2刪除分析二 2.3查找 3.二叉搜索樹遞歸實現3.1插入3.2刪除3.3查找 4.完整代碼 1.什么是二叉搜索樹 任何一個節點&#xff0c;他的左子樹的所有節點都比他小&#xff0c;右…

前端面試熱門知識點總結

URL從輸入到頁面展示的過程 版本1 1.用戶在瀏覽器的地址欄輸入訪問的URL地址。瀏覽器會先根據這個URL查看瀏覽器緩存-系統緩存-路由器緩存&#xff0c;若緩存中有&#xff0c;直接跳到第6步操作&#xff0c;若沒有&#xff0c;則按照下面的步驟進行操作。 2.瀏覽器根據輸入的UR…

Swagger | 解決Springboot2.x/3.x不兼容和依賴報錯等問題

目錄 不兼容報錯提醒 1. 修改Spring Boot版本 2. 修改application.yml配置文件 3. 使用其他替代方案 依賴兼容 配置 Yaml 文件 依賴報錯提醒 解決方法 1. 選擇一個庫 2. 移除springfox依賴 3. 添加springdoc依賴 4. 配置springdoc 5. 清理項目 6. 啟動項目 示例代…

C++默認構造函數、普通構造函數、拷貝構造、移動構造、委托構造及析構函數深度解析

目錄 一、默認構造函數&#xff08;Default Constructor&#xff09;二、普通構造函數&#xff08;General Constructor&#xff09;三、拷貝構造函數&#xff08;Copy Constructor&#xff09;四、移動構造函數&#xff08;Move Constructor&#xff0c;C11&#xff09;五、委…

JVM 深度解析

一、JVM 概述 1.1 什么是 JVM&#xff1f; JVM&#xff08;Java Virtual Machine&#xff0c;Java 虛擬機&#xff09;是 Java 程序運行的核心引擎。它像一個“翻譯官”&#xff0c;將 Java 字節碼轉換為機器能理解的指令&#xff0c;并管理程序運行時的內存、線程等資源。 …

OpenCV CUDA 模塊圖像過濾-----創建一個計算圖像導數的濾波器函數createDerivFilter()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 cv::cuda::createDerivFilter 是 OpenCV CUDA 模塊中的一個工廠函數&#xff0c;用于創建一個計算圖像導數的濾波器。這個濾波器可以用來計算圖像…

Spring Boot 接口開發實戰指南

Spring Boot 接口開發實戰指南 一、基礎接口開發步驟 1.1 添加必要依賴 <!-- pom.xml --> <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></depen…

題目 3325: 藍橋杯2025年第十六屆省賽真題-2025 圖形

題目 3325: 藍橋杯2025年第十六屆省賽真題-2025 圖形 時間限制: 2s 內存限制: 192MB 提交: 494 解決: 206 題目描述 小藍要畫一個 2025 圖形。圖形的形狀為一個 h w 的矩形&#xff0c;其中 h 表示圖形的高&#xff0c;w 表示圖形的寬。當 h 5,w 10 時&#xff0c;圖形如下所…

UML 時序圖 使用案例

UML 時序圖 UML 時序圖 (Sequence Diagram)時序圖的主要元素消息類型詳解時序圖示例時序圖繪制步驟時序圖的應用場景 UML 時序圖 (Sequence Diagram) 時序圖是UML(統一建模語言)中用于展示對象之間交互行為的動態視圖&#xff0c;它特別強調消息的時間順序。 時序圖的主要元素…

PPT連同備注頁(演講者模式)一塊轉為PDF

首先&#xff0c;進入創建PDF/XPS&#xff1a; 然后進入選項&#xff1a; 發布選項-發布內容里選備注頁&#xff1a; 導出的原始結果是這樣的&#xff1a; 這個時候裁剪一下&#xff0c;范圍為所有頁面&#xff1a; 最終結果&#xff1a; 如果導出不選“備注頁”而是只勾選“包…

AI時代新詞-多模態(Multimodal)

一、什么是多模態&#xff08;Multimodal&#xff09;&#xff1f; 多模態&#xff08;Multimodal&#xff09;是指在人工智能中&#xff0c;融合多種不同類型的信息&#xff08;如文本、圖像、語音、視頻等&#xff09;進行處理和分析的技術。與傳統的單一模態&#xff08;例…