如何从QString中删除尾随空格?

Di *_*Zou 32 c++ string qt trim qt4

我想删除一个中的所有尾随空格字符QString.我在找什么做的Python函数str.rstrip()QString.

我做了一些谷歌搜索,发现了这个:http://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);
Run Code Online (Sandbox Code Playgroud)

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

Fra*_*mas 45

QString 有两个与修剪空白相关的方法:

如果只想删除尾随空格,则需要自己实现.这是一个模仿以下实现的实现trimmed:

QString rstrip(const QString& str) {
  int n = str.size() - 1;
  for (; n >= 0; --n) {
    if (!str.at(n).isSpace()) {
      return str.left(n + 1);
    }
  }
  return "";
}
Run Code Online (Sandbox Code Playgroud)

  • @nullstellensatz`trimmed`删除前导和尾随空格,而`rstrip`只删除尾随空格. (4认同)
  • 一个人的"基本任务"是另一个人的"为什么有人会需要那个?" (4认同)

And*_*ovs 27

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

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

QString str = "  lots\t of\nwhitespace\r\n ";
str = str.simplified();
// str == "lots of whitespace";
Run Code Online (Sandbox Code Playgroud)

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

QString str = "  lots\t of\nwhitespace\r\n ";
str = str.trimmed();
// str == "lots\t of\nwhitespace"
Run Code Online (Sandbox Code Playgroud)


Bar*_*art 9

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

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


Sil*_*ker 6

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

#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;
}
Run Code Online (Sandbox Code Playgroud)

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