为啥使用 QString::right 在字符串的开头省略逗号?
Posted
技术标签:
【中文标题】为啥使用 QString::right 在字符串的开头省略逗号?【英文标题】:Why a comma is omitted at the beginning of a string using QString::right?为什么使用 QString::right 在字符串的开头省略逗号? 【发布时间】:2018-09-19 09:33:22 【问题描述】:回答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】:QString::right
函数
返回一个包含
n
最右边个字符的子字符串。
[特别强调我的]
由于密钥字符串的长度为6
,因此将返回最右边的6
字符,为您提供不带逗号的"value2"
。
如果你想得到没有前导键的字符串,你可以改用mid
:
value.toString().mid(key.length())
对于您的用例,我宁愿建议midRef
,因为实际上不需要创建子字符串的副本。
【讨论】:
一时间我对计数从哪里开始感到困惑,巧合让我误以为它有效。这是使用错误的功能。谢谢你让我重回正轨!以上是关于为啥使用 QString::right 在字符串的开头省略逗号?的主要内容,如果未能解决你的问题,请参考以下文章
为啥在字符串中使用 javascript 转义字符的引号需要是 \\' 而不是 \'
为啥我不能在没有括号的插值字符串中使用条件运算符? [复制]
为啥我们在尝试用另一个字符串替换它时使用带有“\”的@ [重复]
为啥来自 customTableViewCell 的 UiTextField 没有在我的 UiViewController 中使用 UITableView 返回字符串