Удаление пробелов внутри строки - PullRequest
20 голосов
/ 24 ноября 2011

У меня есть строка lots\t of\nwhitespace\r\n, которую я упростил, но мне все еще нужно избавиться от других пробелов в строке.

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

Я могу сделать это erase_all(str, " "); в ускорении, но я хочу остаться в QT.

Ответы [ 4 ]

53 голосов
/ 24 ноября 2011
str = str.simplified();
str.replace( " ", "" );

Первый изменяет все ваши пробельные символы на один экземпляр ASCII 32, второй удаляет это.

12 голосов
/ 24 ноября 2011

Попробуйте это:

str.replace(" ","");
8 голосов
/ 06 марта 2014

Вариант 1 :

Упростите пробел, затем удалите его

По документам

[QString::simplified] Возвращает строку, в которой пробелы удалены из начала и конца, и каждая последовательность внутренних пробелов заменена одним пробелом.

Как только строка упрощена, пробелы можно легко удалить.

str.simplified().remove(' ')

Вариант 2 :

Используйте QRegExp для захвата всех типов пробелов в remove.

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

Примечания

  • Строка OPs имеет пробелы разных типов (табуляция, возврат каретки, новая строка), которые необходимо удалить. Это сложная часть.

  • QString::remove было введено в Qt 5.6; до 5.6 можно удалить, используя QString::replace и заменив пробел пустой строкой "".

0 голосов
/ 07 июня 2018

Вы можете опустить вызов на simplified() с помощью регулярного выражения:

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

Я не измерил, какой метод быстрее. Я думаю, это регулярное выражение будет работать хуже.

...