The same is string splitting. The difference between split() and section() is that the former returns the split content as a list.
There are multiple overloaded forms of split().
QStringList QString::split(QChar sep, QString::SplitBehavior behavior = KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
Parameter 3 sets whether it is case sensitive.
Parameter 2 configures how to handle empty strings:
- QString::KeepEmptyParts keep empty string
- QString::SkipEmptyParts does not retain empty strings
#define debug qDebug()<<
int main(int argc, char *argv[])
{
QString str = "a,,b,c";
debug str.split(',');
debug str.split(',',QString::SkipEmptyParts);
}
If there is no matching delimiter in the string, the string itself is added to the list:
QString QStringList::join() is the reverse operation of split, which merges the list into a QString.
Other overloaded versions:
- QStringList QString::split(const QString &sep, QString::SplitBehavior behavior = KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
- QStringList QString::split(const QRegExp &rx, QString::SplitBehavior behavior = KeepEmptyParts) const
- QStringList QString::split(const QRegularExpression &re, QString::SplitBehavior behavior = KeepEmptyParts) const
Each overloaded version of split() has a corresponding splitRef() function, which returns the reference QStringRef of the split substring:
- QVector<QStringRef> QString::splitRef(QChar sep, QString::SplitBehavior behavior = KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
- QVector<QStringRef> QString::splitRef(const QString &sep, QString::SplitBehavior behavior = KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
- QVector<QStringRef> QString::splitRef(const QRegExp &rx, QString::SplitBehavior behavior = KeepEmptyParts) const
- QVector<QStringRef> QString::splitRef(const QRegularExpression &re, QString::SplitBehavior behavior = KeepEmptyParts) const
QStringRef only contains a reference to QString and does not copy QString. For efficiency, you should try to use splitRef instead of split()