轉:https://www.cnblogs.com/qianqiannian/p/6415329.html
C++語言提供了兩種字符串的實現:C風格的字符串,以'\0‘結尾;std::string,即標准模版庫中的類。Qt則提供了自己的字符串實現:QString,QString不用擔心內存分配以及關於'\0'結尾的這些注意事項
另外,與C風格的字符串不同,QString中間是可以包含'\0'符號的,而length()函數則會返回整個字符串的長度,而不僅僅是從開始到'\0'的長度。同Java的String類類似,QString也重載的+和+=運算符。
這兩個運算符可以把兩個字符串連接到一起,QString可以自動的對占用內存空間進行擴充,這種連接操作是很迅速的
示例:
1 QString str = "User: "; 2 str += userName + "\n";
QString的append()函數則提供了類似的操作,例如:
1 str = "User: "; 2 str.append(userName); 3 str.append("\n");
使用static的函數number()可以把數字轉換成字符串。例如:
1 QString str = QString::number(54.3);
你也可以使用非static函數setNum()來實現相同的目的:
1 QString str; str.setNum(54.3);
而一系列的to函數則可以將字符串轉換成其他基本類型,例如toInt(), toDouble(), toLong()等。這些函數都接受一個bool指針作為參數,函數結束之后將根據是否轉換成功設置為true或者false:
1 bool ok; double d = str.toDouble(&ok); 2 if(ok) { // do something... } 3 else { // do something... }
對於QString,Qt提供了很多操作函數,例如,使用mid()函數截取子串:
1 QString x = "Nine pineapples"; 2 QString y = x.mid(5, 4); 3 // y == "pine" QString z = x.mid(5); / 4 / z == "pineapples"
mid()函數接受兩個參數,第一個是起始位置,第二個是取串的長度。如果省略第二個參數,則會從起始位置截取到末尾。正如上面的例子顯示的那樣。
函數left()和rigt()類似,都接受一個int類型的參數n,都是對字符串進行截取。不同之處在於,left()函數從左側截取n個字符,而right()從右側開始截取。下面是left()的例子:
1 QString x = "Pineapple"; 2 QString y = x.left(4); 3 // y == "Pine"
函數startsWith()和endsWith()可以檢測字符串是不是以某個特定的串開始或結尾,例如:
1 if (url.startsWith("http:") && url.endsWith(".png")) { }
這段代碼等價於
1 if (url.left(5) == "http:" && url.right(4) == ".png") { }
只不過前者要比后者更加清楚簡潔,並且性能也更快.
QString還提供了replace()函數供實現字符串的替換功能;trimmed()函數去除字符串兩側的空白字符(注意,空白字符包括空格、Tab以及換行符,而不僅僅是空格);toLower()和toUpper()函數會將字符串轉換成小寫大寫字符串;
remove()和insert()函數提供了刪除和插入字符串的能力;simplified()函數可以將串中的所有連續的空白字符替換成一個,並且把兩端的空白字符去除,例如" \t ”會返回一個空格" "。
將const char *類型的C風格字符串轉換成QString也是很常見的需求,簡單來說,QString的+=即可完成這個功能:
1 str += " (1870)";
這里,我們將const char * 類型的字符串" (1870)"轉換成為QString類型。
判斷字符串是否為空
1 bool QString::isEmpty () const
如:
1 QString().isEmpty(); // returns true 2 QString("").isEmpty(); // returns true 3 QString("x").isEmpty(); // returns false 4 QString("abc").isEmpty(); // returns false
判斷字符串是否存在
1 bool QString::isNull () const
如:
1 QString().isNull(); // returns true 2 QString("").isNull(); // returns false 3 QString("abc").isNull(); // returns false
使某個字符填滿字符串,也就是說字符串里的所有字符都有等長度的ch來代替。
QString::fill ( QChar ch, int size = -1 )
如:
QString str = "Berlin"; str.fill('z'); // str == "zzzzzz" str.fill('A', 2); // str == "AA"
從字符串里查找相同的某個字符串str。
int QString::indexOf ( const QString & str, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive ) const
如:
QString x = "sticky question"; QString y = "sti"; x.indexOf(y); // returns 0 x.indexOf(y, 1); // returns 10 x.indexOf(y, 10); // returns 10 x.indexOf(y, 11); // returns -1
指定位置插入字符串
QString & QString::insert ( int position, const QString & str )
如:
QString str = "Meal"; str.insert(1, QString("ontr")); // str == "Montreal"
刪除字符串中間某個字符。
QString & QString::remove ( int position, int n )
如:
QString s = "Montreal"; s.remove(1, 4); // s == "Meal"
替換字符串中的某些字符。
QString & QString::replace ( int position, int n, const QString & after )
如:
QString x = "Say yes!"; QString y = "no"; x.replace(4, 3, y); // x == "Say no!"