如何在qt6中使用replaceFirst和replaceLast

如何在qt6中使用replaceFirst和replaceLast

在qt6中replace默认是replaceAll的,没有replaceFirst和replaceLast,但是可以运用QString提供的以下两个方法现实

qsizetype QString::indexOf(const QString &str, qsizetype from = 0, 
							Qt::CaseSensitivity cs = Qt::CaseSensitive) const
QString &QString::replace(qsizetype position, qsizetype n, const QString &after)

indexOf方法说明

返回此字符串中第一个字符串str的索引位置,从中的索引位置向前搜索。如果找不到str,则返回-1。
如果cs是Qt::CaseSensitive(默认值),则搜索区分大小写;否则,搜索不区分大小写。

不区分大小写用Qt::CaseInsensitive
from默认值为0,从左往右搜索,如果from为-1,则搜索从最后一个字符开始;如果是-2,则在倒数第二个字符处,依此类推。

 QString x = "sticky question";
 QString y = "sti";
 x.indexOf(y);               // returns 0
 x.indexOf(y, 1);            // returns 10
 x.indexOf(y, 10);           // returns 10
 x.indexOf(y, 11);           // returns -1

replace方法说明

将从索引位置开始的n个字符替换为后面的字符串,并返回对此字符串的引用。
注意:如果指定的位置索引在字符串内,但位置+n超出字符串范围,则n将被调整为停止在字符串的末尾。

例如,从第4个位置开始替换3个字符

    QString x = "Say yes!";
    QString y = "no";
    qDebug() << x.replace(4, 2, y);

    x = "Say yes!";
    y = "no";
    qDebug() << x.replace(4, 3, y);

    x = "Say yes!";
    y = "no";
    qDebug() << x.replace(4, 4, y);


    x = "Say yes!";
    y = "no";
    qDebug() << x.replace(4, 5, y);

输出

"Say nos!"
"Say no!"
"Say no"
"Say no"

replaceFirst和replaceLast具体实现

QString replaceFirst(QString &str,const QString &before,const QString &after,
						Qt::CaseSensitivity cs= Qt::CaseSensitive){
    return str.replace(str.indexOf(before,cs),before.length(),after);
}

QString replaceLast(QString &str,const QString &before,const QString &after,
						Qt::CaseSensitivity cs= Qt::CaseSensitive){
    return str.replace(str.lastIndexOf(before,cs),before.length(),after);
}

测试代码

#include 
#include 
#include 
#include 


QString replaceFirst(QString &str,const QString &before,const QString &after,
					Qt::CaseSensitivity cs= Qt::CaseSensitive){
    return str.replace(str.indexOf(before,cs),before.length(),after);
}

QString replaceLast(QString &str,const QString &before,const QString &after,
					Qt::CaseSensitivity cs= Qt::CaseSensitive){
    return str.replace(str.lastIndexOf(before,cs),before.length(),after);
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QString ss = "aabbccbbccbb";
    qDebug() << replaceFirst(ss,"bb","");
    ss = "aabbccBbccbB";
    qDebug() << replaceLast(ss,"bB","");
    
    return a.exec();
}

输出结果

"aaccbbccbb"
"aabbccBbcc"

你可能感兴趣的:(qt,qt,开发语言,c++,AI编程)