QString中文字符串中指定字符的查找

场景

在一个QString类型的中文字符串中查找一个指定的中文字符串,找到该指定的中文字符串后,返回其找到的下标位置,判断下标位置向前一位的字符是否为指定的字符。

示例

运行环境

Windows10下qt5.12.9.

示例代码

主要实现部分的代码:

QString strCreateionMsg = "你好,世家上的花朵、小雨、鸟儿";
QString str = "花朵";
 int nRet = strCreateionMsg .indexOf(str);
 QString strTemp = strCreateionMsg;
 if (nRet != -1 && strCreateionMsg.contains("、"))//找到了
 {
      // 中文字符串中查找指定下标的中文
      qDebug("---HAVE:", QString(strTemp.at(nRet - 1)) == "、",
                     "strTemp.at(nRet - 1)=", strTemp.at(nRet - 1),
                     "QString(strTemp.at(nRet - 1)):",
                     QString(strTemp.at(nRet - 1)));
       //前一位为顿号,则移除顿号加指定的字符串,否则移除指定的字符串加后面的顿号
       QString(strTemp.at(nRet - 1)) == "、"
        ? strCreateionMsg = strTemp.remove(QString("、" + str))
        : strCreateionMsg = strTemp.remove(QString(str + "、"));
 }

代码讲解

上述实现的代码,主要是为了在指定的中文字符串中查找指定的中文字符串“花朵”,或者“小雨”,或者“鸟儿”,若是查找到指定的中文字符串则返回找到的下标位置nRet ,当给定的中文字符串中有顿号且能找到指定的字符串时,若找到的位置前一个字符为顿号,删除前一个位置上的顿号和指定的字符串,若前一个位置不为顿号,则删除指定的字符串和后面的顿号。
即:
找到花朵后,删除其花朵后面紧跟着的顿号,得到字符串:QString strCreateionMsg = “你好,世家上的小雨、鸟儿”;
若找到小雨,原始给定字符串删除小雨和小雨后紧跟着的顿号,得到字符串:
QString strCreateionMsg = “你好,世家上的花朵、鸟儿”;

难点重点

这里的重点是中文字符串中一个中文对应的下标不一定是向前了一位。上面的例子中找到指定的中文字符串后返回找到中文字符串时的位置,本以为判断前一位上的字符只需向前一位,但中文却不同,这里需要做一下转换,即strTemp.at(nRet - 1)获取到的字符转换为QString,再与中文字符串顿号相对比。故而有QString(strTemp.at(nRet - 1)) == “、”。
本文仅以记录。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肩上风骋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值