Как удалить конечные пробелы из строки Q?
Я хочу удалить все конечные пробелы в QString
. Я ищу, чтобы сделать то, что функция Python str.rstrip()
с QString
.
Итак, сейчас у меня есть что-то вроде этого:
while(str.endsWith( ' ' )) str.chop(1);
while(str.endsWith( 'n' )) str.chop(1);
Есть ли более простой способ сделать это? Я хочу оставить все пробелы в начале.9 ответов:
QString
имеет два метода, связанных с обрезкой пробелов:
QString QString::trimmed() const
Возвращает строку, в которой пробелы удалены из начала и конца.QString QString::simplified() const
Возвращает строку, в которой пробелы удалены из начала и конца, а каждая последовательность внутренних пробелов заменена одним пробелом.Если вы хотите удалить только конечные пробелы, вам нужно реализовать это самостоятельно. Вот такая реализация который имитирует реализацию
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 ""; }
QString предоставляет только две функции, связанные с обрезкой. В случае, если они не удовлетворяют вашим потребностям, я боюсь, что вам нужно реализовать свою собственную функцию обрезки.
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"
Если у вас нет или не нужно никаких пробелов в начале, вы можете использовать
Это игнорирует любые внутренние пробелы, которые исправляются альтернативным решением, предоставленным Андреем Кайниковым.QString QString::trimmed () const
.
Вы можете сделать это с помощью регулярного выражения:
#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; }
Будет ли это быстрее, я не уверен.
QString:: Trimmed () удаляет пробелы из начала и конца - если вы уверены, что в начале нет пробелов, вы можете использовать это.
Если вы не хотите делать глубокую копию строки:
QString & rtrim( QString & str ) { while( str.size() > 0 && str.at( str.size() - 1 ).isSpace() ) str.chop( 1 ); return str; }
Нет глубокой копии и нет повторных вызовов размера / ЧОПа:
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; }