[Qt学习] 字符串列表类QStringList

 

 

QStringList类是QList的派生类,是字符串的列表类。它是一个非常有用的类,在处理字符串时使用QStringList,有时能事半功倍。

 

所有QList支持的操作都可用于QStringList,同时QStringList在此基础上提供了一些便于操作QString的功能。

(QStringList可以使用QList的所有方法,如:append(), prepend(), insert(), replace(), removeAll(), removeAt(), removeFirst(), removeLast(), and removeOne()。)

1. QStringList的构造函数及析构函数
构造函数:
a. QStringList ()
b. QStringList ( const QString & str )
c. QStringList ( const QStringList & other )
d. QStringList ( const QList<QString> & other )
e. QStringList ( std::initializer_list<QString> args )

析构函数未明显定义,为编译器提供的默认析构函数

 

2. QStringList的operator+()、operator<<()方法

operator+()方法
QStringListoperator+ ( const QStringList & other ) const
该方法用于连接参数指定的QStringList与调用该方法的QStringList,相较而言,我们更经常使用的是非成员即友元函数operator+();

operator<<()方法
QStringList &operator<< ( const QString & str )
QStringList &operator<< ( const QStringList & other )
该方法是对输出流插入运算符<<的重载,将参数指定的QString或QStringList插入到调用该方法的QString中,这也是初始化QStringList的惯用方法之一。

示例:
QStringList strList1;
strList1 << "China" << "USA" << "Russia" << "England";
现在strList1中有4个QString元素。
QStringList strList2("Japan");
strList1 << strList2;
现在strList1中有5个QString对象。
strList1 = strList1.operator+(strList2);
现在strList1中有6个QString对象,分别是"China"、“USA”、“Russia”、“England”、“Japan”、“Japan”。

 

3. QStringList的indexOf()方法与lastIndexOf()方法

indexOf()方法
intindexOf ( const QRegExp & rx, int from = 0 ) const
intindexOf ( const QString & value, int from = 0 ) const
intindexOf ( QRegExp & rx, int from = 0 ) const
同QString的indexOf()一样,该方法也是查找参数内容在调用该方法的QStringList中首次出现的索引;

lastIndexOf()方法
intlastIndexOf ( const QRegExp & rx, int from = -1 ) const
intlastIndexOf ( const QString & value, int from = -1 ) const
intlastIndexOf ( QRegExp & rx, int from = -1 ) const
同QString的lastIndexOf()一样,返回参数内容在调用该方法的QStringList中最后一次出现的索引。

示例:
int index = strList1.indexOf("Japan");
index的结果为4;
index = strList1.lastIndexOf("Japan");
index的结果为5。

 

4. QStringList的join()、sort()、removeDuplicates()方法
join()方法
QStringjoin ( const QString & separator ) const
使用参数提供的分隔符将QStringList中的元素连接为一个QString,该方法同QString的split()方法功能刚好相反。
sort()方法
voidsort ()
sort()方法对调用该方法的QStringList中的对象按字母表升序排序,使用Qt的qSort()算法来实现;注意如果希望使用其他顺序进行排序,请考虑使用QMap()容器来实现。
removeDuplicates()方法
intremoveDuplicates ()
该方法去除调用其的QStringList中的重复项目,注意不需要对QStringList中的元素进行排序,去除后仍旧保持原来的顺序,函数返回remove掉的重复条目的数目。
示例:
int numRemoved = strList1.removeDuplicates();
numRemoved的结果为1,因为strList1中的"Japan"项目重复,移除前strList1中有6个元素,移除后strList1中余下5个不一样的元素;
QString str = strList1.join("");
则str中的结果为"ChinaUSARussiaEnglandJapan" ;
strList1.sort();
则strList1中的元素内容为“China”、“England”、“Japan”、“Russia”、“USA”。

 

5. QStringList的contains()和filter()方法

contains()方法
boolcontains ( const QString & str, Qt::CaseSensitivity cs = Qt::CaseSensitive ) const
如果QStringList中存在参数指定的QString对象,则返回true,否则返回false。
filter()方法
QStringListfilter( const QString & str, Qt::CaseSensitivity cs = Qt::CaseSensitive ) const
QStringListfilter( const QRegExp & rx ) const
filter()相当于一个过滤器,如果QStringList中元素还有参数指定的内容,则保留,否则去除,这些保留的元素构成一个新的QStringList。

示例:
qDebug() << strList1.contains("China");
输出结果为true;
QStringList strList2;
strList2 << "Bill Janny" << "Bill Clinton" << "Lucy Clinton" << "Bill Harry";
strList3 = strList2.filter("Bill");
则strList3中的内容为"Bill Janny"、“Bill Clinton”、“Bill Harry”。

 

示例:

 

#include 
#include 


static QTextStream cout(stdout, QIODevice::WriteOnly);
int main(int argc, char *argv[])
{
	QString str = "1,2,3,4,5,6,7,8,9";
	QStringList strList;
	
	strList = str.split(",");
	
	cout << "String list item count: " << strList.size() << endl;

	for(int i = 0; i < strList.size(); i++)
		cout << i + 1 << ":" << strList[i] << endl;

	QString str2;
	str2 = strList.join(",");

	cout << str2 << endl;
	
	return 0;
}

 

 

 

  • 7
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Algorithm_goddness

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值