QString 删除最后一个字符

QString remove last characters

如何从 /home/admin/job0/Job

中删除 /Job
QString name = "/home/admin/job0/Job"

我想删除"/"之后的最后一个字符串

使用 QString::lastIndexOf 查找最后一个斜线。 之后获取带有 QString::left 的子字符串,直到最后一个斜杠出现的位置

QString name = "/home/admin/job0/Job";
int pos = name.lastIndexOf(QChar('/'));
qDebug() << name.left(pos);

这将打印:

"/home/admin/job0"

您应该检查 int pos for -1 以确保找到斜杠。

要在输出中包含最后一个斜杠,请将 +1 添加到基础位置

qDebug() << name.left(pos+1);

将输出:

"/home/admin/job0/"

你可以这样做:

QString s("/home/admin/job0/Job");
s.remove(QRegularExpression("\/(?:.(?!\/))+$"));
// s is "/home/admin/job0" now

对于后来的读者来说最容易理解的可能是:

QString s("/home/admin/job0/Job");
s.truncate(s.lastIndexOf(QChar('/'));
qDebug() << s;

正如代码字面上所说的那样。

当您已经知道要删除多少个字符时,您有 QString::chop() 个案例。
QString::remove()一样,只是从字符串的后面开始工作。

很抱歉在 4 年后回复这个 post,但我有(我认为)最有效的答案。 您可以使用

qstr.remove(0, 1); //removes the first character
qstr.remove(1, 1); //removes the last character

这就是您需要做的所有事情,从 QString 中逐个删除字符(第一个或最后一个),直到剩下 1 个字符。

如果您使用的 Qt 高于 6 并且确定“/”包含在您的单词中,您应该使用 QString::first(qsizetype n) const 函数来代替 QString::left(qsizetype n) const

示例:

QString url= "/home/admin/job0/Job"
QString result=url.first(lastIndexOf(QChar('/')));

如果您运行这些代码:

QElapsedTimer timer;
timer.start();
for (int j=0; j<10000000; j++)
{
    QString name = "/home/admin/job0/Job";
    int pos = name.lastIndexOf("/");
    name.left(pos);
}
qDebug() << "left method" << timer.elapsed() << "milliseconds";
timer.start();
for (int j=0; j<10000000; j++)
{
    QString name = "/home/admin/job0/Job";
    int pos = name.lastIndexOf(QChar('/'));
    name.first(pos);
}
qDebug() << "frist method" << timer.elapsed() << "milliseconds";

结果:

左方法10034毫秒

第一个方法 8098 毫秒