我正在尝试将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...
。
任何变通的想法都会很棒。
答案 0 :(得分:1)
看来,您并不是要用!
代替\
,而是要从字符串中删除双反斜杠和转义引号。
您可以通过以下两行来实现:
data.remove("\\\""); // remove \"
data.replace("\\\\", "\\"); // replace \\ with \
答案 1 :(得分:0)
您正在将调试输出与字符串的内容混淆,大多数调试环境都提供了类似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\""