QT中QString按照空格和Tab拆分

 更新时间:2026年01月13日 09:59:44   作者:CSDN_RTKLIB  
本文主要介绍了Qt中QString::split()方法的使用,包括按空格、Tab键以及同时按空格和Tab键拆分字符串的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在 Qt 中,QString::split() 方法支持按指定分隔符拆分字符串,按空格和Tab 键拆分的核心是指定正确的分隔符,并根据需求处理连续分隔符的情况。以下是详细用法和示例:

一、核心知识点

  • QString::split(const QString &sep, SplitBehavior behavior = KeepEmptyParts):
    • sep:分隔符(空格用 " ",Tab 用 "\t")
    • behavior:拆分行为(关键!处理连续分隔符)
      • KeepEmptyParts(默认):保留空字符串(如连续空格会拆出空项)
      • SkipEmptyParts:跳过空字符串(实际开发中更常用,避免无用空项)

二、按空格拆分(" ")

1. 基础用法(跳过连续空格)

最常用场景:拆分以一个或多个空格分隔的字符串(如命令行参数、空格分隔的文本)。

#include <QString>
#include <QStringList>
#include <QDebug>

int main() {
    QString str = "Hello  World   Qt  编程助手"; // 包含1个、2个、3个连续空格
    // 按空格拆分,跳过空项(SplitBehavior::SkipEmptyParts)
    QStringList result = str.split(" ", Qt::SkipEmptyParts);
    
    // 输出结果:["Hello", "World", "Qt", "编程助手"]
    qDebug() << "按空格拆分结果:" << result;
    return 0;
}

2. 保留空项(默认行为)

如果需要保留连续空格产生的空字符串(极少用):

QString str = "a  b c";
QStringList result = str.split(" "); // 不指定behavior,默认KeepEmptyParts
// 输出结果:["a", "", "b", "c"](两个空格之间拆出空项)
qDebug() << result;

三、按 Tab 键拆分("\t")

Tab 键的转义字符是 "\t",用法与空格完全一致,仅需替换分隔符。

1. 基础用法(跳过连续 Tab)

#include <QString>
#include <QStringList>
#include <QDebug>

int main() {
    QString str = "姓名\t年龄\t\t性别\t职业"; // 包含1个、2个连续Tab
    // 按Tab拆分,跳过空项
    QStringList result = str.split("\t", Qt::SkipEmptyParts);
    
    // 输出结果:["姓名", "年龄", "性别", "职业"]
    qDebug() << "按Tab拆分结果:" << result;
    return 0;
}

2. 保留空项(默认行为)

QString str = "x\ty\t\tz";
QStringList result = str.split("\t"); // 保留空项
// 输出结果:["x", "y", "", "z"](两个Tab之间拆出空项)
qDebug() << result;

四、进阶:同时按空格和 Tab 拆分

如果需要同时拆分空格和 Tab(比如处理混合分隔符的文本),可以用 QRegExp 作为分隔符:

#include <QRegExp>

QString str = "Hello\tWorld  Qt\t\t编程助手";
// 匹配一个或多个空格或Tab(\\s 表示空白字符,包含空格、Tab、换行等)
QStringList result = str.split(QRegExp("\\s+"), Qt::SkipEmptyParts);
// 输出结果:["Hello", "World", "Qt", "编程助手"]
qDebug() << result;

总结

拆分需求代码示例关键说明
按空格拆分(去空项)str.split(" ", Qt::SkipEmptyParts)处理连续空格
按 Tab 拆分(去空项)str.split("\t", Qt::SkipEmptyParts)处理连续 Tab
同时按空格+Tab 拆分str.split(QRegExp("\\s+"), Qt::SkipEmptyParts)匹配所有空白字符

开发建议:优先使用 Qt::SkipEmptyParts,避免拆分后出现无用的空字符串,减少后续处理麻烦。

五、解读

QStringList result = str.split(QRegExp("\\s+"), Qt::SkipEmptyParts);

这行代码既能匹配所有空白字符,也能完美处理字符间多个连续空格、多个连续Tab,以及空格与Tab混合的情况,核心原因的是正则表达式 \\s+ 的设计:

1. 先明确两个关键规则(对应你的疑问)

正则部分作用说明
\\s匹配 所有空白字符(Qt的QRegExp中,\s 等价于 [ \t\n\r\f]):
- 普通空格( )、Tab(\t)
- 换行(\n)、回车(\r)、换页符(\f)
(如果只想匹配“空格+Tab”,不想包含换行/回车,可改成 [ \\t]+)
+匹配 一个或多个连续 的前面字符(即连续的空白字符会被当成“一个整体分隔符”)
Qt::SkipEmptyParts强制跳过拆分后可能产生的空字符串(结合 \\s+ 几乎不会出现空项,但加上更稳妥)

2. 实际示例(覆盖你关心的场景)

假设字符串包含 多个空格、多个Tab、空格+Tab混合,拆分效果如下:

#include <QString>
#include <QStringList>
#include <QRegExp>
#include <QDebug>

int main() {
    // 测试字符串:包含 2个空格、3个Tab、空格+Tab混合(中间无其他字符)
    QString str = "Hello  World\t\t\tQt  \t编程助手\nTest\rFoo\fBar";
    
    // 按正则拆分
    QStringList result = str.split(QRegExp("\\s+"), Qt::SkipEmptyParts);
    
    // 输出结果:["Hello", "World", "Qt", "编程助手", "Test", "Foo", "Bar"]
    qDebug() << "拆分结果:" << result;
    return 0;
}

可以看到:

  • 连续2个空格(Hello World)→ 当成1个分隔符,拆出 HelloWorld
  • 连续3个Tab(World\t\t\tQt)→ 当成1个分隔符,拆出 WorldQt
  • 空格+Tab混合(Qt \t编程助手)→ 当成1个分隔符,拆出 Qt编程助手
  • 换行(\n)、回车(\r)、换页符(\f)也被当成分隔符(如果不需要这些,后面会说怎么调整)。

3. 补充:如果只想匹配“空格+Tab”(排除换行/回车等)

如果你的场景中,换行(\n)、回车(\r)是有效内容,不想被当成分隔符,只需把正则改成 [ \\t]+(明确只匹配“空格”和“Tab”):

// 只匹配空格和Tab,不匹配换行/回车
QStringList result = str.split(QRegExp("[ \\t]+"), Qt::SkipEmptyParts);

比如上面的测试字符串,拆分后会保留换行后的内容(因为 \n 不再是分隔符):

// 输出结果:["Hello", "World", "Qt", "编程助手\nTest\rFoo\fBar"]

总结

  • 你的核心疑问:是!str.split(QRegExp("\\s+"), Qt::SkipEmptyParts) 完全满足需求——匹配所有空白字符,且多个连续空格、多个Tab、空格+Tab混合,都会被当成“一个分隔符”处理,拆分后不会有多余空项。
  • 实用建议:
    1. 处理“任意空白字符分隔”(包括换行/回车)→ 用 \\s+;
    2. 只处理“空格+Tab分隔”(排除换行等)→ 用 [ \\t]+;
    3. 该写法是处理“混合空白字符分隔”的最优方案,比单独按空格或Tab拆分更通用。

到此这篇关于QT中QString按照空格和Tab拆分的文章就介绍到这了,更多相关QT QString空格和Tab拆分内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • C语言顺序查找算法介绍及示例

    C语言顺序查找算法介绍及示例

    顺序查找又称线性查找,主要用于在线性表中进行查找。顺序查找通常分为对一般的无序线性表的顺序查找和对按关键字有序的顺序表的顺序查找,下面我们来一探究竟
    2022-08-08
  • C++ 实现静态单链表的实例

    C++ 实现静态单链表的实例

    这篇文章主要介绍了C++ 实现静态单链表的实例的相关资料,需要的朋友可以参考下
    2017-06-06
  • QT实现二、八、十六进制之间的转换

    QT实现二、八、十六进制之间的转换

    本文主要介绍了QT实现二、八、十六进制之间的转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • 判断一个数是不是素数的方法

    判断一个数是不是素数的方法

    判断一个数是不是素数的方法,需要的朋友可以参考一下
    2013-03-03
  • C++模板二段名字查找方法

    C++模板二段名字查找方法

    下面小编就为大家带来一篇C++模板二段名字查找方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • Linux下编译C程序的过程

    Linux下编译C程序的过程

    我们总是在Linux下输入 gcc -o app main.c 即可编译好程序,对于具体的详细过程及流程,相信亲们就不太了解啦!下面给大家展示一下C编译器的解释全过程。
    2016-01-01
  • C语言中野指针和空指针的区别

    C语言中野指针和空指针的区别

    本文主要介绍了野指针和空指针的概念、用途、原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • c++11之std::async 和std::thread的区别小结

    c++11之std::async 和std::thread的区别小结

    std::async和std::thread都是C++11中提供的线程库,它们都可以用于创建新线程,本文主要介绍了c++11之std::async 和std::thread的区别小结,感兴趣的可以了解一下
    2024-02-02
  • 利用C语言编辑画图程序的实现方法(推荐)

    利用C语言编辑画图程序的实现方法(推荐)

    下面小编就为大家带来一篇利用C语言编辑画图程序的实现方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • 基于Turbo C(V2.0)编译错误信息的详细介绍

    基于Turbo C(V2.0)编译错误信息的详细介绍

    本篇文章对Turbo C(V2.0)编译的错误信息进行了详细的介绍。需要的朋友参考下
    2013-05-05

最新评论