如何在qt6中使用replaceFirst和replaceLast

博客介绍了在Qt6中使用replaceFirst和replaceLast的方法。由于Qt6中replace默认是replaceAll,没有这两个方法,可借助QString的indexOf和replace方法实现。还说明了indexOf方法的搜索规则及replace方法的替换示例,并给出了具体实现的测试代码和输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何在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 <QApplication>
#include <QString>
#include <QRegularExpression>
#include <QDebug>


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"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值