替换为单个黑斜杠在Qt中添加"

Replacing to single Blackslash adds " in Qt

本文关键字:Qt 添加 单个黑 替换      更新时间:2023-10-16

我正在尝试替换字符!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=0rno=- 6804998800185322649 2 IN IP4 127.0.0.1rns=-rnt=0 0rna=group:BUNDLE audio videorna=msid-semantic: WMSrnm=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....

任何解决的想法都会很棒。

似乎,您不是在要求用替换!,而是要从字符串中删除双反斜杠和转义引号。

您可以通过以下两行实现此目的:

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

您将调试输出与字符串的内容混为一谈,大多数调试环境都应用了类似 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""