web-dev-qa-db-fra.com

Suppression des espaces dans une chaîne

J'ai une chaîne lots\t of\nwhitespace\r\n que j'ai simplifiée, mais je dois toujours supprimer les autres espaces de la chaîne.

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

Je peux faire ceci erase_all(str, " "); dans boost mais je veux rester dans qt.

19
Gandalf
str = str.simplified();
str.replace( " ", "" );

Le premier change tous vos caractères d'espaces en une seule instance de ASCII 32, le second supprime cela.

52
arnt

Essaye ça:

str.replace(" ","");
12
tonekk

Option 1 :

Simplifiez l'espace blanc, puis supprimez-le

Par les docs

[QString::simplified] Renvoie une chaîne dont les espaces blancs sont supprimés au début et à la fin et chaque séquence d'espaces internes internes est remplacée par un seul espace.

Une fois la chaîne simplifiée, les espaces blancs peuvent facilement être supprimés.

str.simplified().remove(' ')

Option 2 :

Utilisez une QRegExp pour capturer tous les types d'espaces dans remove.

QRegExp space("\\s");
str.remove(space);

Notes

  • La chaîne OPs contient des espaces de différents types (tabulation, retour à la ligne, nouvelle ligne), qui doivent tous être supprimés. C'est la partie la plus délicate.

  • QString::remove a été introduit dans Qt 5.6; Avant la suppression de 5.6, vous pouvez supprimer QString::replace en remplaçant l'espace blanc par une chaîne vide "".

7
Terrabits

Vous pouvez ignorer l'appel à simplified() avec une expression régulière:

str.replace(QRegularExpression("\\s+"), QString());

Je n'ai pas mesuré quelle méthode est la plus rapide. Je suppose que cette regex serait pire.

0
Martin Hennings