web-dev-qa-db-ja.com

QStringから末尾の空白を削除するにはどうすればよいですか?

QStringの末尾の空白文字をすべて削除したい。 Python function 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);

これを行う簡単な方法はありますか?最初にすべての空白を保持したいです。

31
Di Zou

QStringには、空白のトリミングに関連する2つのメソッドがあります。

末尾の空白のみを削除する場合は、自分で実装する必要があります。 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 "";
}
43
Frank S. Thomas

QString は、トリミング関連の関数を2つだけ提供します。ニーズに合わない場合は、独自のカスタムトリミング機能を実装する必要があると思います。

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"
_
27

開始点に空白がないか、または必要ない場合は、 QString QString::trimmed () const を使用できます。

これは、Andrejs Cainikovsが提供する代替ソリューションによって修正される内部空白を無視します。

8
Bart

あなたは正規表現でそれを行うことができます:

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

これがもっと速いかどうかはわかりません。

6
Silas Parker

文字列の詳細コピーを作成したくない場合:

QString & rtrim( QString & str ) {
  while( str.size() > 0 && str.at( str.size() - 1 ).isSpace() )
    str.chop( 1 );
  return str;
}
3
Johan

QString :: Trimmed() は、先頭と末尾から空白を削除します。先頭に空白がないことが確実な場合は、これを使用できます。

3
Martin Beckett

ディープコピーもサイズ/チョップの繰り返し呼び出しもありません。

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
Jason C

私の知る限り、組み込み関数はtrimmed()simplified()のみです。そのため、手動でトリミングする必要があります。その場合、QChar function isSpace()を使用して、文字がスペース文字かどうかを確認する必要があります。

0