采用Unicode編碼,所以一個QChar占用兩個字節
使用隱式共享技術來節省內存和減少不必要的數據拷貝
跨平台使用,不用考慮字符串的平台兼容性
QString直接支持字符串和數字之間的相互轉換
QString直接支持字符串之間的大小比較(按照字典序)
QString直接支持不同編碼下的字符串轉換
QString直接支持std::string和std::wstring之間的相互轉換
QString直接支持正則表達式的使用
QString對象構造:
QChar qch[5]={'a','b','c','d','e'}; QString str=QString (qch , 3 ); //使用QChar數組構造QString //參數2:取前3個字符組成字符串 str=QString (qch ); //qch的所有字符組成字符串 QChar* p=qch; str=QString (p); //使用QChar數組指針構造QString str="中國";
追加字符串:
QString s = "str"; s += "ing";//字符串相加,s = "string" s.append("|"); // 尾部添加 s.push_back("lm"); // 尾部添加 s.prepend("This is ");//前面追加 s.push_front("中國"); //前面追加
格式輸出:
QString s; s.sprintf("%s %.1f%%", "Value", 100.0);//格式輸出方式一---s = "Value 100.0%" //符號的意思參看:https://www.cnblogs.com/liming19680104/p/11216495.html s = QString("%1 %2 %3 %4").arg("This").arg("is").arg("a").arg("test");//格式輸出方式二---s = "This is a test"
插入及替換:
QString s="我是中國人"; s.insert(2,"優秀的"); //插入字符串 //參數1:插入位置---從0開始 //參數2:要插入的字符串 s.replace(5,2,"呼和浩特"); //替換 //參數1:開始替換的位置---從0開始 //參數2:要被替換掉的字符數 //參數3:用來替換的字符串
查找:
QString s="我ef是ab中國cd人Abef"; int i=s.indexOf("Ab",0,Qt::CaseInsensitive); //查找,返回找到的位置序號 //參數1:待查找的字符串,也可以是正則表達式 //參數2:開始查找的位置;如果-1表示從最后一個字符開始,如果-2表示從倒數第二個開始,以此類推 //Qt::CaseSensitive 區分大小寫--默認;Qt::CaseInsensitive 不區分大小寫 //返回待查找字符串第一次出現的位置,沒有找到目標字符串返回-1 qDebug()<<i; i=s.lastIndexOf("Ab"); //從尾部開始查找
清除子串:
QString s="我ef是ab中國cd人Abef"; QString str; str=s.remove("Abc",Qt::CaseInsensitive); //清除所有子串 //參數1:待清除的字符串 //Qt::CaseSensitive 區分大小寫--默認;Qt::CaseInsensitive 不區分大小寫 //返回清除后的子串;找不到子串返回原字符串
提取字符串:
QString s = "QString"; QString ss = s.mid(1,3); //提取字符串 //參數1:開始提取的位置 //參數2:要提取的字符個數;可以省略:提取到末尾 //ss = "Str" ss = s.left(4);//提取左邊的n個字符 //ss = "QStr" ss=s.right(3); //提取右邊的n個字符 //ss = "ing"
字符串比較:
QString str="123"; QString str1="789"; bool bl=str != str1; //兩個字符串是否不等於 bl=str == str1; //兩個字符串是否等於 bl=str < str1; //是否小於 bl=str > str1; //是否大於 bl=str <= str1; //是否小於等於 bl=str >= str1; //是否大於等於
判斷字符串是否存在:
QString str="abcEfg"; bool bl=str.contains("ce",Qt::CaseInsensitive); //是否包含子串 ////Qt::CaseSensitive 區分大小寫--默認;Qt::CaseInsensitive 不區分大小寫
判斷字符串是否是empty:
bool isEmpty () const//原型 QString().isEmpty(); // returns true QString("").isEmpty(); // returns true QString("x").isEmpty(); // returns false QString("abc").isEmpty(); // returns false
判斷字符串是否NULL"
bool isNull () const//原型 QString().isNull(); // returns true QString("").isNull(); // returns false QString("abc").isNull(); // returns false
分隔字符串:
通過使用QString::split()能夠將一個大串按照某個子串划分成多個子串並存到QStringList中
QString str = "You,I,She"; QStringList list= str.split(","); //分隔字符串 //參數:分割字符串 //("You", "I", "She")
section()
section() 函數的原型為:
QString section (const QString &sep, int start, int end = -1, SectionFlags flags = SectionDefault) const
其功能是從字符串中提取以 sep 作為分隔符,從 start 端到 end 端的字符串
QString str2, str1="學生姓名,男,1984-3-4,漢族,山東"; str2=str1.section (",",0,0); // str2="學生姓名", 第 1 段的編號為 0 str2=str1.section (",",1,1}; // str2="男" str2=str1.section (",",0,1}; // str2="學生姓名,男" str2=str1.section (",",4,4); // str2="山東"
去除首尾空格:
QString s(" abc def ghi "); s = s.trimmed();//去除首尾空格
simplified() 不僅去掉首尾的空格,中間連續的空格也用一個空格替換
大小寫轉換:
QString s = "Hello World"; QString ss = s.toUpper(); //都轉換成大寫 ss = s.toLower(); //都轉換成小寫
判斷是否以某個字符串開始或結束:
QString s = "http:www.baidu.com"; bool bl = s.startsWith("http:"); //是否以某個字符串開始 bl = s.endsWith("com"); //是否以某個字符串結束
獲取子串出現的次數:
QString s = "abc Abcefg nbgabc"; int i=s.count("abc");//獲取子串出現的次數 //參數2:Qt::CaseSensitive 區分大小寫--默認;Qt::CaseInsensitive 不區分大小寫
獲取字符串長度:
QString s = "我是中國人"; int i=s.length();//獲取字符串長度--字符數
也可以用 i=s.size();