【问题标题】:How to split QString如何拆分QString
【发布时间】:2016-04-14 13:32:28
【问题描述】:

我正在尝试解析这种形式的QString

QString str = "34 t:513 l:21 o:0x0147 [FBI] Miscellaneous No. : 89f2aad996ae4a5c961a 123 532af2";
QRegExp tagExp(":");
QStringList firstList = str.split(tagExp);

但是我只需要"9f2aad996ae4a5c961a 123 532af2"。那么有没有可能得到": "之后的子串呢?

【问题讨论】:

  • 我会像 str.split("No. :"); 一样拆分它,然后取出列表中的第二个元素。
  • 这取决于您要解析的行的预期格式。 (例如,总是有一个“:”,它之前的文本是随机文本还是有结构)。如果是关于最后一个“:”,我会选择 lastIndexOf(“:”) 和 QString::mid()。

标签: qt split qstring


【解决方案1】:

如果我理解正确,您需要列表的最后一个元素(在最后一个“:”之后)。您可以执行以下操作:

QRegExp tagExp(":");
QStringList firstList = str.split(tagExp);
// Get the last string from list:
//  "34 t"
//  "513 l"
//  "21 o"
//  "0x0147 [FBI] Miscellaneous No. "
//  "89f2aad996ae4a5c961a 123 532af2"  <<-- this is the last element in list
QString requiredPart = firstList.takeLast();

函数takeLast 获取最后一个字符串并将其返回,并将其从列表中删除。如果您不想从列表中删除最后一个元素,您可以执行以下操作:

QString requiredPart = firstList.value(firstList.length() - 1);

QString requiredPart = firstList.at(firstList.length() - 1);

QString requiredPart = firstList[firstList.length() - 1];

但第一个选项是最安全的,因为它可以更好地解决“越界”问题。

你也可以使用:

requiredPart = requiredPart.trimmed();

删除开头/结尾的所有空格。或者进一步使用:

requiredPart = requiredPart.simplified();

删除字符串中多余的空格。你可能不需要这个。

【讨论】:

    猜你喜欢
    • 2012-07-29
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 2014-12-30
    相关资源
    最近更新 更多