采用Unicode编码,所以一个QChar占用两个字节
使用隐式共享技术来节省内存和减少不必要的数据拷贝
跨平台使用,不用考虑字符串的平台兼容性
QString直接支持字符串和数字之间的相互转换
QString直接支持字符串之间的大小比较(按照字典序)
QString直接支持不同编码下的字符串转换
QString直接支持std::string和std::wstring之间的相互转换
QString直接支持正则表达式的使用

QString对象构造:

QChar qch[]={'a','b','c','d','e'};
QString str=QString (qch , ); //使用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(,"优秀的"); //插入字符串
//参数1:插入位置---从0开始
//参数2:要插入的字符串 s.replace(,,"呼和浩特"); //替换
//参数1:开始替换的位置---从0开始
//参数2:要被替换掉的字符数
//参数3:用来替换的字符串

查找:

QString s="我ef是ab中国cd人Abef";
int i=s.indexOf("Ab",,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:开始提取的位置
//参数2:要提取的字符个数;可以省略:提取到末尾
//ss = "Str"
ss = s.left();//提取左边的n个字符
//ss = "QStr"
ss=s.right(); //提取右边的n个字符
//ss = "ing"

字符串比较:

QString str="";
QString str1="";
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 (",",,); // str2="学生姓名", 第 1 段的编号为 0
str2=str1.section (",",,}; // str2="男"
str2=str1.section (",",,}; // str2="学生姓名,男"
str2=str1.section (",",,); // 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();

字符串类QString的更多相关文章

  1. Qt入门-字符串类QString

    原地址:http://blog.csdn.net/xgbing/article/details/7770854 QString是Unicode字符的集合,它是Qt API中使用的字符串类. QStri ...

  2. 第11课 Qt中的字符串类

    1. 历史遗留问题和解决方案 (1)历史遗留问题 ①C语言不支持真正意义上的字符串 ②C语言用字符数组和一组函数实现字符串操作 ③C语言不支持自定义类型,因此无法获得字符串类型 (2)解决方案 ①从C ...

  3. Qt常用类——Qstring

    Qstring有一些方面跟C/C++中的string的使用,例如把一个字符串追加到另一个字符串中,也是用“+”.也有append函数等. 下面是是Qstring的一些常用的具体函数示例: Qt的QSt ...

  4. Core Java 总结(字符和字符串类问题)

    所有代码均在本地编译运行测试,环境为 Windows7 32位机器 + eclipse Mars.2 Release (4.5.2) 2016-10-17 整理 字符,字符串类问题 正则表达式问题 J ...

  5. Java:字符串类String的功能介绍

    在java中,字符串是一个比较常用的类,因为代码中基本上处理的很多数据都是字符串类型的,因此,掌握字符串类的具体用法显得很重要了. 它的主要功能有如下几种:获取.判断.转换.替换.切割.字串的获取.大 ...

  6. 可变字符串类 StringBuilder

    string类创建的字符串是不可变的(同一内存中),每更改一次,就会新开辟内存,不利于高效频繁操作. 当频繁操作同一字符串变量时,建议使用StringBuilder. 可变字符串类StringBuil ...

  7. Java开发知识之Java字符串类

    Java开发知识之Java字符串类 一丶简介 任何语言中.字符串都是很重要的.都涉及到字符串的处理. 例如C++中. 字符串使用内存. 并提供相应的函数进行处理 strcmp strcat strcp ...

  8. C++自定义String字符串类,支持子串搜索

    C++自定义String字符串类 实现了各种基本操作,包括重载+号实现String的拼接 findSubStr函数,也就是寻找目标串在String中的位置,用到了KMP字符串搜索算法. #includ ...

  9. 设计一个字符串类String(C++练习题)

    要求:设计一个字符串类String,可以求字符串长度,可以连接两个串(如,s1=“计算机”,s2=“软件”,s1与s2连接得到“计算机软件”),并且重载“=”运算符进行字符串赋值,编写主程序实现:s1 ...

随机推荐

  1. 【转载】mysql行列转换方法总结

    [转载]mysql行列转换方法总结 [MySQL] 行列转换变化各种方法实现总结(行变列报表统计.列变行数据记录统计等) Mysql 列转行统计查询 .行转列统计查询 在某些数据库中有交叉表,但在My ...

  2. NOIp2016 D2T3 愤怒的小鸟【搜索】(网上题解正解是状压)

    题目传送门 没啥别的想法,感觉就是搜索,经过原点的抛物线已知两个点就可以求出解析式,在还没有被打下来的两个猪之间随意配对,确定解析式之后标记在这个抛物线下被打下来的猪. 猪也可以单独用一个抛物线打下来 ...

  3. LeetCode-求最长回文子序列

    题目:给定一个字符串,求它的最长回文子串 /*求最长回文子串,以当前字符为中心,向两边同时拓展*/ string longestPalindrome(string s) { int len = s.l ...

  4. Java小知识-----Map 按Key排序和按Value排序

    Map排序的方式有很多种,这里记录下自己总结的两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value). 1.按键排序 jdk内置的java.util包下的Tr ...

  5. .Net Core Grpc Consul 实现服务注册 服务发现 负载均衡

    本文是基于..net core grpc consul 实现服务注册 服务发现 负载均衡(二)的,很多内容是直接复制过来的,..net core grpc consul 实现服务注册 服务发现 负载均 ...

  6. 关于springcloud hystrix 执行 hystrix.stream 跳转失败的问题

    经过观看网友的总结:应该时版本的问题.某些版本没有对/hystrix.stream进行配置 所以解决方案(网友答案): 需要配置类配置下面 @Bean public ServletRegistrati ...

  7. C++多线程基础学习笔记(一)

    下面分三个方面多线程技术的必须掌握一些基本知识. 1.进程 2.线程 3.并发 (1)进程 一个可执行程序运行起来了,即为创建了一个进程.如在电脑上打开了word,就创建了一个word进程,打开QQ, ...

  8. 模块之re模块 正则表达式

    正则表达式,正则表达式在处理字符串上有先天的优势,尤其大数量的字符串.先来记一个网站,此网站功能就是关于正则表达式方面的应用http://tool.chinaz.com/regex/ 单纯的正则表达式 ...

  9. Select2的远程数据操作

    一.概述 如果下拉列表框中的内容太多,最好是使用Select2的远程数据进行筛选. 二.参考文献 https://select2.github.io/examples.html#data-ajax h ...

  10. C# 面向对象3 静态和非静态的区别

    静态和非静态的区别 1.在非静态类中,既可以有实例成员(非静态成员),也可以有静态成员. 2.在调用实例成员的时候,需要使用对象名.实例成员; 在调用静态成员的时候,需要使用类名.静态成员名; 总结: ...