为什么使用QString :: right在字符串的开头省略逗号?

时间:2018-09-19 09:33:22

标签: c++ windows qt qt5

正在回答QString replace characters outside of quotes,我偶然发现了一个奇怪的行为。

执行此代码:

foreach (const QString &key, json.keys()) {
    const QJsonValue &value(json.value(key));

    qDebug() << key << value.toString().right(key.length());
}

与此json A

QJsonObject json {
    {"thing1", "thing1value1"},
    {"thing2", "thing2value2"},
    {"thing3", "thing3value3"}
};

以及此json B (请注意thing2之后的逗号):

QJsonObject json {
    {"thing1", "thing1value1"},
    {"thing2", "thing2,value2"},
    {"thing3", "thing3value3"}
};
在两种情况下

都会产生:

"thing1" "value1"
"thing2" "value2"
"thing3" "value3"

不应为:

"thing1" "value1"
"thing2" ",value2"
"thing3" "value3"
在第二种情况下,

B ?

1 个答案:

答案 0 :(得分:2)

QString::right函数

  

返回一个子字符串,该子字符串包含该字符串的最右端 n 个字符。

[特别强调]

由于密钥字符串的长度为6,因此将返回最右边的6个字符,从而为您提供"value2",且不带逗号。

如果要获取不带前导键的字符串,则可以改用mid

value.toString().mid(key.length())

对于您的用例,我宁愿建议midRef,因为不需要实际创建子字符串的副本