一、qstring截取一段字符串
在QString中,可以使用mid方法來截取一段指定長度的字符串。mid方法接收兩個參數,第一個參數是待截取的字符串的起始位置,第二個參數是待截取字符串的長度。
QString str = "Hello, World!"; QString newStr = str.mid(7, 5); // 從字符串的第7個字符開始,截取5個字符,newStr的值為"World"
也可以不指定第二個參數,則只截取起始位置之後的所有字符。
QString str = "Hello, World!"; QString newStr = str.mid(7); // 從字符串的第7個字符開始,截取之後的所有字符,newStr的值為"World!"
使用left和right方法可以從字符串的左側或右側分別截取指定長度的字符串。left方法從左側開始截取,接收一個參數指定要截取的字符長度。right方法從右側開始截取,同樣接收一個參數指定要截取的字符長度。
QString str = "Hello, World!"; QString newStr1 = str.left(5); // 從字符串的左側開始,截取5個字符,newStr1的值為"Hello" QString newStr2 = str.right(6); // 從字符串的右側開始,截取6個字符,newStr2的值為"World!"
二、qstring字符串替換
QString中提供了replace方法用於字符串替換。replace方法接收兩個參數,第一個參數是被替換的字符串,第二個參數是替換後的字符串。
QString str = "Hello, World!"; str.replace("World", "Mars"); // 將"World"替換成"Mars",str的值變為"Hello, Mars!"
如果需要在替換前先判斷一下字符串中是否包含指定的子串,可以使用contains方法。
QString str = "Hello, World!"; if (str.contains("World")) { str.replace("World", "Mars"); }
三、qstring分隔符取數據
QString提供了split方法用於根據指定分隔符對字符串進行分割。split方法接收一個參數,即指定的分隔符,返回一個字符串列表,表示分割後得到的所有子串。
QString str = "apple,banana,pear"; QStringList list = str.split(","); // 按","為分隔符分割字符串,list的值為["apple", "banana", "pear"]
split方法還可以接收第二個參數,表示分割後的子串的最大數量。
QString str = "apple,banana,pear"; QStringList list = str.split(",", 2); // 按","為分隔符分割字符串,返回2個子串,list的值為["apple", "banana,pear"]
四、qstring如何截取字符串
除了之前介紹的mid、left和right方法之外,QString還提供了幾種截取字符串的方法。
一種是使用remove方法,先刪除指定位置及之後的字符,再刪除指定位置及之前的字符,即可得到所需的子串。
QString str = "Hello, World!"; str.remove(str.indexOf(','), str.length()); // 刪除","及其後的字符 str.remove(0, str.lastIndexOf(' ') + 1); // 刪除第一個空格及其前面的字符
另一種是使用section方法,可以方便地從複雜字符串中提取子串。section方法接收三個參數,第一個參數是指定的分隔符,第二個參數是子串的索引(從0開始),第三個參數是標誌位,表示截取的方式。
QString str = "China,Beijing,Chaoyang"; QString city = str.section(',', 1, 1); // 返回第2個子串"Beijing"
標誌位有三個選項:
- QString::SectionDefault:默認選項,截取指定索引對應的子串。
- QString::SectionSkipEmpty:如果截取得到的子串為空,則跳過。
- QString::SectionIncludeLeadingSep:將分隔符放在截取得到的子串前面。
五、qstring查找字符串
在QString中,可以使用indexOf和lastIndexOf方法查找指定字符串的位置。這兩個方法都接收兩個參數,第一個參數是待查找的字符串,第二個參數是查找起點的位置。
QString str = "Hello, World!"; int pos1 = str.indexOf("l"); // 查找"l"第一次出現的位置,pos1的值為2 int pos2 = str.lastIndexOf("l"); // 查找"l"最後一次出現的位置,pos2的值為10 int pos3 = str.indexOf("l", pos2 + 1); // 從pos2+1的位置開始查找"l",pos3的值為3
另外,還可以使用count方法查找指定子字符串在當前字符串中出現的次數。
QString str = "Hello, World!"; int count = str.count("l"); // 返回"l"在字符串中出現的次數,count的值為3
六、字符串如何轉成qstring
在Qt中經常需要將char*、std::string等其他類型的字符串轉換成QString類型,QString提供了fromStdString、fromLocal8Bit和fromUtf8等方法來實現。
char* cstr = "Hello, World!"; QString str1 = QString::fromLocal8Bit(cstr); // 將本地編碼的字符串轉換成QString std::string stdstr = "Hello, World!"; QString str2 = QString::fromStdString(stdstr); // 將std::string類型的字符串轉換成QString const char* utf8str = "你好,世界!"; QString str3 = QString::fromUtf8(utf8str); // 將UTF-8編碼的字符串轉換成QString
七、string字符串分割
在使用string類型的字符串時,可以先將其轉換成QString類型,然後使用split方法進行分割。另外,也可以使用stringstream對象進行分割。
#include <sstream> #include <string> using namespace std; string str = "apple,banana,pear"; QString qstr = QString::fromStdString(str); // 使用split方法進行分割 QStringList list = qstr.split(","); for (int i = 0; i < list.size(); i++) { string s = list[i].toStdString(); // 將QString轉換成string類型 cout << s << endl; } // 使用stringstream對象進行分割 stringstream ss(str); string s; while (getline(ss, s, ',')) { cout << s << endl; }
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/311203.html