web-dev-qa-db-ja.com

文字列内の空白を削除する

単純化した文字列_lots\t of\nwhitespace\r\n_がありますが、それでも文字列内の他のスペースを取り除く必要があります。

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

これはerase_all(str, " ");をboostで実行できますが、qtに残りたいです。

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

1つ目はすべての空白文字をASCII 32の単一インスタンスに変更し、2つ目はそれを削除します。

53
arnt

これを試して:

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

オプション1

空白を簡略化してから削除

ドキュメント

[QString::simplified]最初と最後から空白が削除され、内部の空白のシーケンスがそれぞれ1つのスペースに置き換えられた文字列を返します。

文字列が単純化されると、空白は簡単に削除できます。

str.simplified().remove(' ')

オプション2

QRegExpを使用して、remove内のすべてのタイプの空白をキャプチャします。

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

注意事項

  • OP文字列には、さまざまなタイプ(タブ、キャリッジリターン、改行)の空白があり、すべて削除する必要があります。これはトリッキーな部分です。

  • QString::removeはQt 5.6で導入されました。 5.6より前のバージョンでは、QString::replaceを使用して削除し、空白を空の文字列""で置き換えることができます。

8
Terrabits

正規表現を使用してsimplified()の呼び出しを省略できます。

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

どちらの方法が速いか測定していません。この正規表現はパフォーマンスが悪いと思います。

0
Martin Hennings