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)) == “、”。
本文仅以记录。

猜你喜欢

转载自blog.csdn.net/blqzj214817/article/details/128376343