news 2026/6/15 7:43:26

【QString】按照空格和Tab拆分

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【QString】按照空格和Tab拆分

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

      • 一、核心知识点
      • 二、按空格拆分(`" "`)
        • 1. 基础用法(跳过连续空格)
        • 2. 保留空项(默认行为)
      • 三、按 Tab 键拆分(`"\t"`)
        • 1. 基础用法(跳过连续 Tab)
        • 2. 保留空项(默认行为)
      • 四、进阶:同时按空格和 Tab 拆分
      • 总结
      • 五、解读
      • 1. 先明确两个关键规则(对应你的疑问)
      • 2. 实际示例(覆盖你关心的场景)
      • 3. 补充:如果只想匹配“空格+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>intmain(){QString str="Hello World Qt 编程助手";// 包含1个、2个、3个连续空格// 按空格拆分,跳过空项(SplitBehavior::SkipEmptyParts)QStringList result=str.split(" ",Qt::SkipEmptyParts);// 输出结果:["Hello", "World", "Qt", "编程助手"]qDebug()<<"按空格拆分结果:"<<result;return0;}
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>intmain(){QString str="姓名\t年龄\t\t性别\t职业";// 包含1个、2个连续Tab// 按Tab拆分,跳过空项QStringList result=str.split("\t",Qt::SkipEmptyParts);// 输出结果:["姓名", "年龄", "性别", "职业"]qDebug()<<"按Tab拆分结果:"<<result;return0;}
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>intmain(){// 测试字符串:包含 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;return0;}

可以看到:

  • 连续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拆分更通用。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/13 7:19:17

Rembg抠图应用实例:产品包装设计的优化方案

Rembg抠图应用实例&#xff1a;产品包装设计的优化方案 1. 引言&#xff1a;智能万能抠图在包装设计中的价值 1.1 行业痛点与技术需求 在现代产品包装设计流程中&#xff0c;设计师经常面临大量图像处理任务——尤其是将商品主体从原始背景中精准分离。传统方式依赖人工使用…

作者头像 李华
网站建设 2026/6/13 1:42:55

轻松实现Qwen2.5-7B高吞吐推理|vLLM加速与负载均衡部署指南

轻松实现Qwen2.5-7B高吞吐推理&#xff5c;vLLM加速与负载均衡部署指南 随着大语言模型在实际业务场景中的广泛应用&#xff0c;如何高效部署并提升推理吞吐量成为工程落地的关键挑战。Qwen2.5-7B作为通义千问团队推出的高性能开源语言模型&#xff0c;在指令遵循、长文本生成…

作者头像 李华
网站建设 2026/6/13 9:23:42

详解Qwen2.5-7B模型部署:利用vLLM与Gradio提升开发效率

详解Qwen2.5-7B模型部署&#xff1a;利用vLLM与Gradio提升开发效率 一、引言&#xff1a;为何选择Qwen2.5-7B vLLM Gradio技术栈 随着大语言模型&#xff08;LLM&#xff09;在自然语言理解、代码生成和多语言支持等方面的持续进化&#xff0c;如何高效地将这些强大的模型集…

作者头像 李华
网站建设 2026/6/13 19:01:28

利用Qwen2.5-7B实现多场景指令微调应用

利用Qwen2.5-7B实现多场景指令微调应用 一、引言&#xff1a;为何选择Qwen2.5-7B进行指令微调&#xff1f; 在当前大语言模型&#xff08;LLM&#xff09;快速发展的背景下&#xff0c;如何将通用预训练模型高效适配到特定业务场景&#xff0c;成为企业落地AI能力的关键挑战。…

作者头像 李华
网站建设 2026/6/13 13:17:20

Qwen2.5-7B大模型技术揭秘|编程、数学与多语言能力全面提升

Qwen2.5-7B大模型技术揭秘&#xff5c;编程、数学与多语言能力全面提升 一、引言&#xff1a;Qwen2.5-7B的技术演进背景 随着大语言模型在自然语言理解、代码生成和多模态任务中的广泛应用&#xff0c;阿里云推出的 Qwen2.5 系列再次将开源模型的能力推向新高度。其中&#xff…

作者头像 李华
网站建设 2026/6/13 4:43:46

ResNet18环境配置终结者:预装镜像,省去3天折腾时间

ResNet18环境配置终结者&#xff1a;预装镜像&#xff0c;省去3天折腾时间 引言&#xff1a;为什么你需要这个预装镜像 如果你正在学习深度学习或计算机视觉课程&#xff0c;ResNet18这个经典模型一定不会陌生。作为图像分类任务的入门模型&#xff0c;它结构简单但效果出色&…

作者头像 李华