我正在使用Qt / KDE开发一个应用程序。在为此编写代码时,我需要读取包含(;
分隔的)
<http://example.com/example.ext.torrent>; rel=describedby; type="application/x-bittorrent"; name="differentname.ext"
我需要将每个属性(如rel,type和name)读入另一个QString
。到目前为止,我所采取的这类计划是这样的
if (line.contains("describedby")) {
m_reltype = "describedby" ;
}
if (line.contains("duplicate")) {
m_reltype = "duplicate";
}
即如果我只需要存在属性(而不是其值),我就会手动寻找文本并设置属性是否存在。然而,对于像“type”这样的属性以及其实际值需要存储在QString
中的名称,这种方法失败了。虽然我知道这可以通过将整个字符串拆分为分隔符;
然后搜索属性或其值来完成,但我想知道是否有更清晰且更有效的方法。
答案 0 :(得分:2)
我需要将每个属性(如rel,type和name)读入不同的QString。
是否有保证此字符串始终为URL?
我想知道是否有更清洁,更有效的方法。
不要重新发明轮子!您可以使用QURL::queryItems
来解析这些查询变量并返回名称 - 值对的映射。
但是,请确保您的字符串是格式正确的网址(以便QURL
不拒绝它)。
答案 1 :(得分:2)
据我所知,数据并不总是一个URL。 所以,
1:拆分字符串
2:对于每个子字符串,将标识符与值分开:
id = str.mid(0,str.indexOf("="));
value = str.mid(str.indexOf("=")+1);
您也可以使用RegExp:
regexp = "^([a-z]+)\s*=\s*(.*)$";
id = \1 of the regexp;
value = \2 of the regexp;