c++ - qstring查找 - qt字符串




如何从QString中删除尾部空格? (6)

我想删除QString中的所有尾随空格字符。 我希望用QString做Python函数str.rstrip()

我做了一些谷歌搜索,发现了这个: http://www.qtforum.org/article/20798/how-to-strip-trailing-whitespace-from-qstring.htmlhttp://www.qtforum.org/article/20798/how-to-strip-trailing-whitespace-from-qstring.html

所以我现在所拥有的是这样的:

while(str.endsWith( ' ' )) str.chop(1);
while(str.endsWith( '\n' )) str.chop(1);

有更简单的方法吗? 我想在开头保留所有的空白。



QString仅提供两个与修剪相关的功能。 如果它们不适合您的需求,我担心您需要实现自己的自定义修剪功能。

QString QString :: simplified()const
返回一个字符串,该字符串从开头和结尾删除了空格,并且每个内部空格序列都替换为单个空格。

QString str = "  lots\t of\nwhitespace\r\n ";
str = str.simplified();
// str == "lots of whitespace";

QString QString :: trimmed()const
返回从开头和结尾删除了空格的字符串。

QString str = "  lots\t of\nwhitespace\r\n ";
str = str.trimmed();
// str == "lots\t of\nwhitespace"

你可以用正则表达式做到这一点:

#include <QtCore>

int main(int argc, char** argv)
{
    QCoreApplication app(argc, argv);

    QString str("Hello world    ");

    qDebug() << str;

    str.remove(QRegExp("\\s+$"));

    qDebug() << str;

    return 0;
}

这是否会更快,我不确定。


如果你在开头没有或者不需要任何空格,你可以使用QString QString::trimmed () const

这忽略了任何内部空白,由Andrejs Cainikovs提供的替代解决方案进行了纠正。


据我所知,唯一的内置函数是trimmed()和simplified()。 所以你需要手动修剪。 在这种情况下,您应该使用QChar函数isSpace()来检查字符是否是空格字符。


没有深拷贝,也没有重复调整大小/印章:

QString & rtrimInPlace (QString &str) {
    for (int n = str.size() - 1; n >= 0; -- n)
        if (!str.at(n).isSpace()) {
            str.truncate(n + 1);
            break;
        }
    return str;
}




trim