【QT】QString和QStringList去掉空格的方法总结

目录

一、QString去掉空格

[1. 移除字符串首尾的空格(trimmed)](#1. 移除字符串首尾的空格(trimmed))

[2. 移除字符串中的所有空格(remove)](#2. 移除字符串中的所有空格(remove))

[3. 仅移除左侧(开头)或右侧(结尾)空格](#3. 仅移除左侧(开头)或右侧(结尾)空格)

[4. 替换多个连续空格为单个空格](#4. 替换多个连续空格为单个空格)

[5. 移除特定位置的空格](#5. 移除特定位置的空格)

总结

二、QStringList去掉空格

[方法 1:使用 removeIf + trimmed(推荐,Qt 5.7+)](#方法 1:使用 removeIf + trimmed(推荐,Qt 5.7+))

[方法 2:使用 filter 保留非空字符串(不修改原列表)](#方法 2:使用 filter 保留非空字符串(不修改原列表))

[方法 3:遍历手动过滤(兼容所有 Qt 版本)](#方法 3:遍历手动过滤(兼容所有 Qt 版本))

[方法 4:仅移除严格空字符串("")](#方法 4:仅移除严格空字符串(""))

关键区别总结

额外场景:同时移除首尾空格


一、QString去掉空格

在 Qt 中,QString 提供了多种方法来移除空格,具体取决于你想移除 所有空格首尾空格 ,还是 特定位置的空格。以下是几种常见的方法:

1. 移除字符串首尾的空格(trimmed

cpp 复制代码
QString str = "  Hello, World!  ";
QString trimmedStr = str.trimmed(); // 移除首尾空格
// 结果:"Hello, World!"
qDebug() << trimmedStr;

适用场景

  • 清理用户输入(如登录表单)。

  • 处理文件读取的行数据。

2. 移除字符串中的所有空格(remove

cpp 复制代码
QString str = " Qt  is  great! ";
QString noSpacesStr = str.remove(' '); // 移除所有空格
// 结果:"Qt is great!"
qDebug() << noSpacesStr;

适用场景

  • 处理需要无空格的字符串(如 URL、文件名)。

  • 数据清洗(如 CSV 文件处理)。

3. 仅移除左侧(开头)或右侧(结尾)空格

cpp 复制代码
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. 替换多个连续空格为单个空格

cpp 复制代码
QString str = "Too    many   spaces";
str = str.simplified(); // 替换连续空格为单个,并trim首尾
// 结果:"Too many spaces"
qDebug() << str;

适用场景

  • 规范化文本(如用户输入的文章内容)。

5. 移除特定位置的空格

cpp 复制代码
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+)

cpp 复制代码
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 保留非空字符串(不修改原列表)

cpp 复制代码
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 版本)

cpp 复制代码
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:仅移除严格空字符串(""

cpp 复制代码
QStringList list = {"apple", "", "  ", "banana"};
list.removeAll(""); // 仅移除 "",不移除 "  "

// 结果:["apple", "  ", "banana"]
qDebug() << list;

注意

  • 仅移除 "",不会处理含空格的字符串(如 " ")。

关键区别总结

方法 是否修改原列表 能否移除 " " 所需 Qt 版本
removeIf ✅ 是 ✅ 是 Qt 5.7+
filter ❌ 否 ✅ 是 Qt 5+
遍历过滤 ❌ 否 ✅ 是 所有版本
removeAll("") ✅ 是 ❌ 否 所有版本

额外场景:同时移除首尾空格

如果希望移除字符串内部空格 ,可结合 QString::remove()

cpp 复制代码
QStringList list = {"apple", "  banana  ", "cherry"};
for (QString& str : list) {
    str = str.remove(' '); // 移除所有空格
}
// 结果:["apple", "banana", "cherry"]
  1. 现代 Qt 项目removeIf(代码简洁,原地修改)

  2. 需要兼容性遍历过滤(通用可靠)

  3. 仅需移除 ""removeAll(最简单)

相关推荐
行者965 小时前
Flutter跨平台开发在OpenHarmony上的评分组件实现与优化
开发语言·flutter·harmonyos·鸿蒙
阿蒙Amon6 小时前
C#每日面试题-Array和ArrayList的区别
java·开发语言·c#
SmartRadio6 小时前
ESP32添加修改蓝牙名称和获取蓝牙连接状态的AT命令-完整UART BLE服务功能后的完整`main.c`代码
c语言·开发语言·c++·esp32·ble
且去填词6 小时前
Go 语言的“反叛”——为什么少即是多?
开发语言·后端·面试·go
知乎的哥廷根数学学派6 小时前
基于生成对抗U-Net混合架构的隧道衬砌缺陷地质雷达数据智能反演与成像方法(以模拟信号为例,Pytorch)
开发语言·人工智能·pytorch·python·深度学习·机器学习
yeziyfx7 小时前
kotlin中 ?:的用法
android·开发语言·kotlin
charlie1145141917 小时前
嵌入式的现代C++教程——constexpr与设计技巧
开发语言·c++·笔记·单片机·学习·算法·嵌入式
古城小栈7 小时前
Rust 网络请求库:reqwest
开发语言·网络·rust
hqwest8 小时前
码上通QT实战12--监控页面04-绘制6个灯珠及开关
开发语言·qt·qpainter·qt事件·stackedwidget
i橡皮擦8 小时前
TheIsle恐龙岛读取游戏基址做插件(C#语言)
开发语言·游戏·c#·恐龙岛·theisle