Qt 5.9中如何从指定QString提取目标子字符串?
Qt 5.9下提取QString指定子串
需求说明
现有如下QString:
QString fileData = "SOFT_PACKAGES.ABC=MY_DISPLAY_OS:MY-Display-OS.2022-3.10.25.10086-1.myApplication";
需要从中提取三个子串:
SoftwareName = MY_DISPLAY_OS(等号=之后、冒号:之前的文本)Release = 2022-3(第一个点.之后、第二个点.之前的文本)Version = 10.25.10086-1(第二个点.之后、最后一个点.之前的文本)
问题背景
尝试使用Qt 6.0+新增的sliced()方法实现,但当前使用Qt 5.9,该方法不兼容,无法正常运行。原有尝试代码:
QString fileData = "SOFT_PACKAGES.ABC=MY_DISPLAY_OS:MY-Display-OS.2022-3.10.25.10086-1.myApplication"; QString SoftwareName = fileData.sliced(fileData.lastIndexOf(':'), fileData.indexOf('.'));
Qt 5.9兼容实现代码
在Qt 5.9中,可以使用mid()方法替代sliced(),结合indexOf()、lastIndexOf()定位关键字符位置,实现如下:
QString fileData = "SOFT_PACKAGES.ABC=MY_DISPLAY_OS:MY-Display-OS.2022-3.10.25.10086-1.myApplication"; // 提取SoftwareName:=之后、:之前的文本 int eqPos = fileData.indexOf('='); int colonPos = fileData.indexOf(':'); QString SoftwareName = fileData.mid(eqPos + 1, colonPos - eqPos - 1); // 提取Release和Version:先定位到第一个.之后的部分 int firstDotPos = fileData.indexOf('.', colonPos); QString afterFirstDot = fileData.mid(firstDotPos + 1); // 拆分afterFirstDot为Release和Version部分 int secondDotPos = afterFirstDot.indexOf('.'); QString Release = afterFirstDot.left(secondDotPos); QString Version = afterFirstDot.mid(secondDotPos + 1, afterFirstDot.lastIndexOf('.') - secondDotPos - 1); // 输出验证 qDebug() << "SoftwareName:" << SoftwareName; // 输出 MY_DISPLAY_OS qDebug() << "Release:" << Release; // 输出 2022-3 qDebug() << "Version:" << Version; // 输出 10.25.10086-1
代码说明
mid(pos, length):从指定位置pos开始,截取长度为length的子串;若省略length,则截取到字符串末尾。left(n):截取字符串前n个字符。indexOf(char, from):从指定起始位置from开始查找字符的索引,未找到返回-1。lastIndexOf(char):从字符串末尾向前查找字符的索引。
内容的提问来源于stack exchange,提问作者Sudhanshu Ojha
相关产品推荐
相关产品推荐

