Замена на одиночные добавления Blackslash "в Qt - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь заменить символ ! на \ в Qt, но при этом он добавляет дополнительный ", с которым очень трудно обойтись.

У меня есть необработанные данные примерно так: "\"v=0\\r\\no=- 1534195387162130326 2 IN IP4 127.0.0.1\\r\\ns=-\\r\\nt=0 0\\r\\na=group:BUNDLE audio video\\r\\na=msid-semantic: WMS\\r\\nm=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 102 0 8 106 105 13 110 112 113 126... и я хочу, чтобы данные были такими: "v=0\r\no=- 6804998800185322649 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE audio video\r\na=msid-semantic: WMS\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 102 0 8 106 105 13 110 112 113 126...

Итак, моя реализация выглядит примерно так:

data.replace("\\", "!");
data.remove("\"");
data.replace("!", "\"");

Он работает, как и ожидалось, до remove, но после этого добавляет " и вывод, который я в итоге получаю: "v=0\"r\"no=- 757357016964659282 2 IN IP4 127.0.0.1\"r\"ns=-\"r\"nt=0 0\"r\"na=group:BUNDLE audio video\"r\"na=msid-semantic: WMS\"r\"nm=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 102 0 8 106 105 13 110 112 113 126....

Любая идея обойти будет великолепна.

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Вы объединяете выходные данные отладки, которые большинство сред отладки предлагают с применением C-подобного экранирования, с содержимым строки. Помните, что вы можете утверждать, что в строке без какой-либо двусмысленности. Для остроумия:

#include <QtCore>
int main() {
  //         01234567 89AB
  QString s("abc!def\\ghi\"");
  auto const originalSize = s.size();
  Q_ASSERT(originalSize == (3*3 + 3)); // three 3-letter groups, and three punctuation characters
  Q_ASSERT(!s.startsWith('\"')); // doesn't start with a quote
  Q_ASSERT(s.startsWith('a'));
  Q_ASSERT(s[3] == '!');
  Q_ASSERT(s[7] == '\\');
  Q_ASSERT(s[11] == '\"');
  s.replace('!', '\\');
  Q_ASSERT(s.size() == originalSize); // the size hasn't changed 
  Q_ASSERT(s[3] == '\\');
  qDebug() << s;
}

Вы можете использовать этот пример, чтобы поиграть с содержимым строки, чтобы доказать себе, что вы понимаете, что происходит. Обратите внимание, что выходные данные отладки будут выглядеть следующим образом, несмотря на то, что в строке нет дополнительных кавычек.

"abc\\def\\ghi\""
0 голосов
/ 28 августа 2018

Кажется, вы не спрашиваете о замене ! на \, но хотите удалить двойные обратные слеши и экранированные кавычки из вашей строки.

Вы можете достичь этого с помощью следующих двух строк:

data.remove("\\\""); // remove \"
data.replace("\\\\", "\\"); // replace \\ with \
...