Comment puis-je supprimer les espaces vides d'un QString?

je veux supprimer tous les espaces vides dans un QString. Je cherche à faire ce que la fonction Python str.rstrip() avec un QString.

J'ai fait quelques recherches sur Google, et j'ai trouvé ceci: http://www.qtforum.org/article/20798/how-to-strip-trailing-whitespace-from-qstring.html

alors ce que j'ai maintenant c'est quelque chose comme ceci:

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

Est-il un moyen plus simple de faire cela? Je veux garder tous les espaces au début.

29
demandé sur BartoszKP 2011-11-21 20:46:02

9 réponses

QString a deux méthodes liées à la taille des espaces blancs:

si vous voulez supprimer seulement les espaces vides, vous devez le mettre en œuvre vous-même. Voici une telle implémentation qui imite l'implémentation de 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 "";
}
39
répondu Frank S. Thomas 2015-07-02 07:18:55

QString ne fournit que deux fonctions liées à l'ébarbage. Dans le cas où ils ne répondent pas à vos besoins, je crains que vous devez mettre en œuvre votre propre fonction de parage personnalisé.

QString QString::simplifié () const

Renvoie une chaîne dont les espaces sont supprimés du début et de la fin, et dont chaque séquence d'espace interne est remplacée par un espace unique.

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

QString QString:: paré () const

Renvoie une chaîne dont l'espace a été enlevé du début et de la fin.

QString str = "  lots\t of\nwhitespace\r\n ";
str = str.trimmed();
// str == "lots\t of\nwhitespace"
26
répondu Andrejs Cainikovs 2018-05-01 17:06:57

Si vous n'avez pas ou n'avez pas besoin de n'importe quel espace au début, vous pouvez utiliser QString QString::trimmed () const.

ceci ignore tout espace blanc interne, qui est corrigé par la solution alternative fournie par Andrejs Cainikovs.

7
répondu Bart 2011-11-21 16:49:58

Vous pouvez le faire avec une expression régulière:

#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;
}

Si ce serait plus rapide, je ne suis pas sûr.

6
répondu Silas Parker 2011-11-21 17:10:41

QString:: Trimmed () supprime les espaces de début et de la fin - si vous êtes sûr qu'il n'y est pas d'espace au début, vous pouvez utiliser cette.

3
répondu Martin Beckett 2011-11-21 16:51:08

Si vous ne voulez pas de faire une copie de la chaîne:

QString & rtrim( QString & str ) {
  while( str.size() > 0 && str.at( str.size() - 1 ).isSpace() )
    str.chop( 1 );
  return str;
}
3
répondu Johan 2012-05-19 15:30:56

Pas de copie en profondeur et pas les appels répétés à la taille/chop:

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;
}
1
répondu Jason C 2013-04-07 17:37:59

autant que je sache, les seules fonctions intégrées sont tronquées() et simplifiées(). Vous aurez donc besoin de couper manuellement. Dans ce cas, vous devez utiliser le QChar fonction isSpace() pour vérifier si un caractère est un caractère d'espace.

0
répondu Sebastian Negraszus 2011-11-21 16:52:06

C'est une variation de la réponse posté par Frank S. Thomas:

QString rstrip(const QString& str, const char *skip = " \r\n\t") {
  int n = str.size() - 1;
  for (; n >= 0; --n) {
    if (0 == strchr(skip, str.at(n).toAscii()))
      return str.left(n + 1);
  }
  return "";
}
0
répondu CapelliC 2011-11-21 18:25:27