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 毫秒
如何从 /home/admin/job0/Job
中删除 /JobQString 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 毫秒