为啥使用 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());

有了这个jsonA

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

加上这个jsonB(注意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 转义字符的引号需要是 \\' 而不是 \'

为啥我不能在没有括号的插值字符串中使用条件运算符? [复制]

为啥我们在尝试用另一个字符串替换它时使用带有“\”的@ [重复]

为啥在字符串连接上使用 os.path.join?

C# - 为啥我不能在字符串中使用三元运算符? [复制]

为啥来自 customTableViewCell 的 UiTextField 没有在我的 UiViewController 中使用 UITableView 返回字符串