QString常见用法总结
- 前言(来自官方文档描述)
- 1、字符串末尾追加append()
- 2、去除字符串头尾的空白字符trimmed()
- 3、字符串全部转大写或者转小写
- 4、获取字符串长度size()、length()
- 5、替换字符串的子字符串replace()
- 6、参数替换占位符
- 7、分割字符串split()
- 8、字符串比较是否一样以及区分大小写compare()
- 9、字符串str1是否包含字符串str2:contains
- 10、检查字符串是否以特定字符开头或结束startswith()、endswith()
- 11、查找子字符串在字符串中第一次或者最后一次出现的位置
- 12、在字符串开头添加字符prepend()
- 13、返回字符串左起或者右起特定长度的字符
- 14、从特定位置开始移除特定长度的字符remove()
- 15、判断字符串是否为空isEmpty()、isNull()
- 16、QString转int、double、longlong、long、short
前言(来自官方文档描述)
~~~~~~~ QString 存储一个 16 位字符串,其中每个对应于一个 UTF-16 代码单元。(代码值高于 65535 的 Unicode 字符使用代理项对存储,即两个连续的 s。
~~~~~~~ 是一种国际标准,支持当今使用的大多数书写系统。它是 US-ASCII (ANSI X3.4-1986) 和 Latin-1 (ISO 8859-1) 的超集,所有 US-ASCII/Latin-1 字符都位于相同的代码位置。
~~~~~~~ 在后台,QString 使用(写入时复制)来减少内存使用并避免不必要的数据复制。这也有助于减少存储 16 位字符而不是 8 位字符的固有开销。
~~~~~~~ 除了QString之外,Qt还提供了存储原始字节和传统的8位“\0”终止字符串的类。在大多数情况下,QString 是您想要使用的类。它在整个Qt API中使用,Unicode支持确保您的应用程序易于翻译,如果您想在某个时候扩展应用程序市场。合适的两种主要情况是需要存储原始二进制数据,以及内存保护至关重要时(如嵌入式系统)
1、字符串末尾追加append()
//第一种:append
QString str = "Hello";
str.append("world");
//str = Helloworld,想让两个词分开还需要中间差一个空白格
QString str = "Hello";
str.append(" ");
str.append("world");
//str = Hello world
//第二种:直接写在一起
QString str1 = "Hello";
QString str2 = "world";
QString str3 = str1 + str2;
//str3 = Helloworld
//第三种:insert
QString str1 = "Hello";
QString str2 = "world";
str1.insert( str1.size() + str2);
//str1 = Helloworld
//注意:append要比insert快很多,他在数据末尾预先分配了空间
2、去除字符串头尾的空白字符trimmed()
QString str = " 你好 ";
str = str.trimmed();
// str == "你好"
3、字符串全部转大写或者转小写
//全部转大写
QString str = "TeXt";
str = str.toUpper();
// str == "TEXT"
//全部转小写
QString str = "The Qt PROJECT";
str = str.toLower();
// str == "the qt project"
4、获取字符串长度size()、length()
//第一种:size
QString str1 = "Hello";
int i = str1.size();
//i = 5;
//第二种:length
QString str1 = "Hello";
int i = str1.length();
//i = 5
5、替换字符串的子字符串replace()
QString x = "Say yes!";
QString y = "no";
x.replace(4, 3, y);
// x == "Say no!"
//三个参数为:4代表从第几位开始替换,3代表替换几位总共,y代表要替换上去的字符
6、参数替换占位符
//官方代码
QString i;
QString total;
QString fileName;
QString status = QString("Processing file %1 of %2: %3")
.arg(i).arg(total).arg(fileName);
//实例演示
QString i = "I";
QString x = "LOVE";
QString y = "YOU";
QString z = QString("%1 %2 %3").arg(i).arg(x).arg(y);
//z = I LOVE YOU
7、分割字符串split()
//第一种:常见的逗号,空白格,冒号等等作为分割符
QString str = "a,,b,c";
QStringList list1 = str.split(',');
// list1: [ "a", "", "b", "c" ]
QStringList list2 = str.split(',', QString::SkipEmptyParts);
// list2: [ "a", "b", "c" ]
QString str = "abc";
auto parts = str.split("");
// parts: {"", "a", "b", "c", ""} QString::SkipEmptyParts可以跳过空的字符
QString str = "/a/b/c/";
auto parts = str.split('/');
// parts: {"", "a", "b", "c", ""}
//第二种:正则表达式作为分隔符
QString str;
QStringList list;
str = "Some text\n\twith strange whitespace.";
list = str.split(QRegExp("\\s+"));
// list: [ "Some", "text", "with", "strange", "whitespace." ],使用一个或多个空白字符作为分隔符
str = "This time, a normal English sentence.";
list = str.split(QRegExp("\\W+"), QString::SkipEmptyParts);
// list: [ "This", "time", "a", "normal", "English", "sentence" ],使用任何非单词字符作为分隔符
str = "Now: this sentence fragment.";
list = str.split(QRegExp("\\b"));
// list: [ "", "Now", ": ", "this", " ", "sentence", " ", "fragment", "." ],使用零长度作为分隔符
8、字符串比较是否一样以及区分大小写compare()
QString str1 = "Hello";
QString str2 = "hello";
int i = QString::compare(str1,str2,Qt::CaseInsensitive);
//i = 0 ;Qt::CaseInsensitive为不区分大小写,如果两个字符串相等,则返回0;如果不相等,则看他们在字典的排序顺序,若第一个顺序小于第二个,返回负数,若大于第二个,则返回正数
int x = QString::compare("aUtO", "AuTo", Qt::CaseInsensitive); // x == 0
int y = QString::compare("auto", "Car", Qt::CaseSensitive); // y > 0
int z = QString::compare("auto", "Car", Qt::CaseInsensitive); // z < 0
9、字符串str1是否包含字符串str2:contains
QString str = "Peter Pan";
str.contains("peter", Qt::CaseInsensitive); // returns true
10、检查字符串是否以特定字符开头或结束startswith()、endswith()
//是否特定字符开头
QString str = "Bananas";
str.startsWith("Ban"); // returns true
str.startsWith("Car"); // returns false
//是否特定字符结尾
QString str = "Bananas";
str.endsWith("anas"); // returns true
str.endsWith("pple"); // returns false
11、查找子字符串在字符串中第一次或者最后一次出现的位置
//查找字符串出现的位置以及从第几位查起
QString x = "sticky question";
QString y = "sti";
x.indexOf(y); // returns 0,从头查起,返回出现的位置
x.indexOf(y, 1); // returns 10,从1位查起,返回出现的位置
x.indexOf(y, 10); // returns 10,从10位查起,返回出现的位置
x.indexOf(y, 11); // returns -1,从11位查起,返回出现的位置,-1代表没有查到
//查找字符串最后一次出现的位置
QString x = "crazy azimuths";
QString y = "az";
x.lastIndexOf(y); // returns 6
x.lastIndexOf(y, 6); // returns 6
x.lastIndexOf(y, 5); // returns 2
x.lastIndexOf(y, 1); // returns -1
12、在字符串开头添加字符prepend()
QString x = "ship";
QString y = "air";
x.prepend(y);
// x == "airship"
13、返回字符串左起或者右起特定长度的字符
//左起第一种:返回的位数没有超过字符串长度
QString x = "Pineapple";
QString y = x.left(4); // y == "Pine"
//左起第二种:返回位数超过了字符串长度,剩余的用特定字符代替
QString s = "apple";
QString t = s.leftJustified(8, '.'); // t == "apple..."
//右起第一种:返回的位数没有超过字符串长度
QString x = "Pineapple";
QString y = x.right(5); // y == "apple"
//右起第二种:返回位数超过了字符串长度,剩余的用特定字符代替
QString s = "apple";
QString t = s.rightJustified(8, '.'); // t == "...apple"
14、从特定位置开始移除特定长度的字符remove()
QString s = "Montreal";
s.remove(1, 4);
// s == "Meal"
QString t = "Ali Baba";
t.remove(QChar('a'), Qt::CaseInsensitive);
// t == "li Bb"
15、判断字符串是否为空isEmpty()、isNull()
//第一种
QString().isEmpty(); // returns true
QString("").isEmpty(); // returns true
QString("x").isEmpty(); // returns false
QString("abc").isEmpty(); // returns false
//第二种
QString().isNull(); // returns true
QString("").isNull(); // returns false
QString("abc").isNull(); // returns false
16、QString转int、double、longlong、long、short
//转double
QString str = "1234.56";
double val = str.toDouble(); // val == 1234.56
bool ok;
double d;
d = QString( "1234.56e-02" ).toDouble(&ok); // ok == true, d == 12.3456
d = QString( "1234.56e-02 Volt" ).toDouble(&ok); // ok == false, d == 0
d = QString( "1234,56" ).toDouble(&ok); // ok == false
d = QString( "1234.56" ).toDouble(&ok); // ok == true, d == 1234.56
d = QString( "1,234,567.89" ).toDouble(&ok); // ok == false
d = QString( "1234567.89" ).toDouble(&ok); // ok == true
//转float
QString str1 = "1234.56";
str1.toFloat(); // returns 1234.56
bool ok;
QString str2 = "R2D2";
str2.toFloat(&ok); // returns 0.0, sets ok to false
QString str3 = "1234.56 Volt";
str3.toFloat(&ok); // returns 0.0, sets ok to false
//转16进制、10进制
QString str = "FF";
bool ok;
int hex = str.toInt(&ok, 16); // hex == 255, ok == true
int dec = str.toInt(&ok, 10); // dec == 0, ok == false
现总结到这里,后续有其他的再进行补充