官术网_书友最值得收藏!

3.6 字符串列表類QStringList

字符串列表類QStringList是從QList <QString>繼承而來的,是一個非常有用的類。在處理多個字符串時使用QStringList類有時能事半功倍。

QStringList類可以使用QList類的所有函數(或稱為方法),如append()、prepend()、insert()、replace()、removeAll()、removeAt()、removeFirst()、removeLast()和removeOne()。

1. QStringList類對象的初始化

初始化就是把QString字符串添加到QStringList類對象中,一般使用操作符<<。比如:

      QStringList qstrList;
      qstrList<<"Android" << "Qt Creator" << "Java" << "C++";
2. 增加字符串

QStringList類對象可以通過函數append()或使用查找法<<來添加QString字符串,比如:

      QStringList qstrList;
      qstrList.append("python");
      qstrList << "PHP" ;
3. 遍歷QStringList類對象中的元素

可以使用QStringList類的父類QList類的成員函數at()來遍歷QStringList類對象中的元素,該函數的原型聲明如下:

    const T &QList::at(int i);

其中,i表示第i個元素,索引值從0開始。

【例3.5】 遍歷QStringList類對象中的元素

(1)啟動Qt Creator 4.8.2,新建一個控制臺項目,項目名為test。

(2)在test.cpp中輸入如下代碼:

其中,QStringLiteral是Qt 5中新引入的一個用來從“字符串常量”創建QString類對象的宏。

(3)按Ctrl+F5快捷鍵運行這個項目,結果如圖3-5所示。

圖3-5

4. 在某位置插入字符串

QStringList類的父類QList類的成員函數insert()可以將字符串插入到QStringList類對象中指定的位置。比如:

    QStringList list;
    list << "alpha" << "beta" << "delta";
    //執行后,列表中的內容為["alpha", "beta", "gamma", "delta"]
    list.insert(2, "gamma");

第一個參數為我們要插入字符串的位置,后面的參數為要插入的字符串。

除了插入操作,QList類的其他一些方法也都可以使用,比如替換、移除等,具體可以參考QList類中的介紹。下面我們看一下QStringList類自身的成員函數。

5. 合并列表中的字符串為一個字符串

可以調用成員函數join()將QStringList類對象中的所有字符串合并為一個字符串。該函數有幾個原型聲明形式:

    QString QStringList::join(const QString &separator);
    QString QStringList::join(QLatin1String separator);
    QString QStringList::join(QChar separator);

其中,separator是每兩個字符串之間的分隔符字符串;QChar是每兩個字符串之間的分隔符字符。上述函數會返回合并后的字符串。比如:

    QStringList qstrList;
    qstrList<<"Android" << "Qt Creator" << "Java" << "C++";
    // qstrList: ["Android ", " Qt Creator ", " Java ", " C++"]
    QString str = fonts.join(",");
    //str == "Android,Qt Creator,Java,C++"
6. 拆分字符串

可以調用QString類的成員函數split()將QString字符串拆分為多個QStringList元素。該函數的原型聲明如下:

    QStringList QString::split(const QString &sep, QString::SplitBehavior
behavior = KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive);

其中,參數sep是分隔符;KeepEmptyParts表示是否忽略空串;Qt::CaseSensitive表示要區分字母大小寫。該函數返回的是分割后的QStringList類對象。比如:

    str == "Arial, Helvetica, Times, Courier";
    QStringList list;
    list = str.split(',');
    // list: ["Arial", "Helvetica", "Times", "Courier"]

又比如:

    QString str = "Android,Qt Creator, ,Java,C++";
    QStringList list1 = str.split(",");
    // list1: [ "Android", "Qt Creator"," ", "Java", "C++" ]
    QStringList list2 = str.split(",", QString::SkipEmptyParts);
    // list2:[ "Android", "Qt Creator", "Java", "C++" ]

再比如:

    QString str = "a,,b,c";
    QStringList list1 = str.split(',');
    // list1: [ "a", "", "b", "c" ]
    QStringList list2 = str.split(',', QString::SkipEmptyParts);
    // list2: [ "a", "b", "c" ]

可以看出,如果有QString::SkipEmptyParts,空項就不會出現在結果中。默認情況下,空項會被保留。

7. 索引位置

成員函數IndexOf()返回指定字符串第一個出現的索引位置。成員函數lastIndexOf()返回字符串最后一次出現的索引位置。比如:

    QStringList qstrList;
    qstrList<<"Java" << "Android" << "Qt Creator" << "Java" << "C++";
    int index = qstrList.indexOf("Java");//返回 0
    int index = qstrList.indexOf("Java");//返回 3
8. 替換

QStringList類的成員函數replaceInStrings()用來把字符串列表每個元素中的某些字符串替換為新的字符串,該函數的原型聲明如下:

    QStringList & replaceInStrings(const QString &before, const QString &after,
Qt::CaseSensitivity cs = Qt::CaseSensitive);

其中,參數before是要準備替換掉的源字符串;after是準備用于替換的字符串;Qt::CaseSensitive表示匹配時要區分字母大小寫。比如:

    QStringList list;
    list << "alpha" << "beta" << "gamma" << "epsilon";
    list.replaceInStrings("a", "o");
    // list == ["olpho", "beto", "gommo", "epsilon"]

又比如:

    QStringList files;
    files << "$file/src/moc/moc.y" <<  "$file/src/moc/moc.l" <<
"$file/include/qconfig.h";
    files.replaceInStrings("$file", "/usr/file");
    // files: [ "/usr/file/src/moc/moc.y", ...]
9. 過濾

QstringList類的成員函數filter()用于提取一個新的列表,該列表每個元素(字符串)必須包含某個特定的字符串。該函數的原型聲明如下:

    QStringList filter(const QString &str, Qt::CaseSensitivity cs =
Qt::CaseSensitive);

其中,參數str表示要包含在內的字符串;Qt::CaseSensitive表示匹配時要區分字母大小寫,而Qt::CaseInSensitive表示不區分字母大小寫。該函數會返回新的QStringList類對象。比如:

    QStringList list;
    list << "Bill Murray" << "John Doe" << "Bill Clinton";
    QStringList result;
    result = list.filter("Bill");
    // result: ["Bill Murray", "Bill Clinton"]
    result = list.filter("bill",Qt::CaseInSensitive);
    // result: ["Bill Murray", "Bill Clinton"]
主站蜘蛛池模板: 临夏市| 栖霞市| 获嘉县| 楚雄市| 沁水县| 万山特区| 壶关县| 昔阳县| 攀枝花市| 嵊州市| 呼伦贝尔市| 花莲市| 夏邑县| 邯郸市| 桦川县| 龙游县| 平顶山市| 曲周县| 霍山县| 玉树县| 淄博市| 西林县| 阿勒泰市| 潮安县| 柏乡县| 浮山县| 沙田区| 呼玛县| 通城县| 措美县| 和硕县| 宝应县| 察雅县| 万宁市| 海林市| 大埔县| 霍邱县| 巨鹿县| 马鞍山市| 福鼎市| 广饶县|