当前位置: 首页 > news >正文

【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.xdnf.cn/news/654715.html

相关文章:

  • day38python打卡
  • 构建版本没mac上传APP方法
  • 华为OD机试真题——猴子吃桃/爱吃蟠桃的孙悟空(2025B卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
  • 【C++篇】list模拟实现
  • Qt qml Network error问题
  • 「读书报告」内网安全攻防
  • 每日算法-250526
  • GitLab 18.0 正式发布,15.0 将不再受技术支持,须升级【三】
  • 消防营区管理升级:豪越科技智能仓储与装备管理的力量
  • 【Java项目测试报告】:在线音乐平台(Online-Music)
  • 开发过的一个Coding项目
  • top查看 CPU使用情况
  • 【Java学习笔记】单例设计模式
  • C++23 std::start_lifetime_as:用于隐式生存期类型的显式生存期管理函数 (P2590R2)
  • Java网络编程中的I/O操作:从字节流到对象序列化
  • DJI上云API官方demo学习
  • JavaSE核心知识点04工具04-01(JDK21)
  • 【opencv】vs2019中配置opencv
  • 同一个核磁共振(MRI)检查中,不同序列的图像之间空间坐标定位如何实现
  • Redis | 缓存技术对后端的重要性
  • STM32之SPI——外部FLASH和RFID
  • 宫格导航--纯血鸿蒙组件库AUI
  • 树莓派超全系列教程文档--(47)如何使用内核补丁
  • QT中常用的类
  • Cesium 实战 26 - 自定义纹理材质 - 实际应用之飞线(抛物线)
  • 并发的产生及对应的解决方案之服务架构说明
  • 第1章第1节:安全运维基础思维与体系建设-安全运维的定义与核心目标
  • Ext系列文件系统
  • 分布式缓存:证明分布式系统的 CAP 理论
  • [闲谈]C语言的面向对象