QString的切片split等常用操作

目录

一、QString转char*

二、合并字符串

三、分割字符串

·split()函数

·mid(pos,n)函数

·QString::section

·truncate(int)函数,从指定位置截断字符串str

四、去除字符串两端的空白

·QString::trimmed()函数

·QString::simplified()函数

五、查找是否包含字符串

·indexOf()

·startWith()/endsWith()函数

·left(n)/right(n)函数

六、常见问题

·如何在字符串换行排列里面加双引号?

·Linux下qDebug()解决输出中文乱码的问题

方式一、解决单个乱码问题

 方式二、解决整个工程代码中文乱码,在main函数里面加上这几句

其他

 ·数字转换为字符串

·chop(int n)函数,从字符串末尾删除n个字符

·remove(i,n)删除字符串中的


一、QString转char*

方式一:


    
    
  1. QString sData;
  2. char *buffer = sData. toStdString(). c_str();

方式二:QString先转成QByteArry,再由QByteArry转char*


    
    
  1. QString str;
  2. //方式1
  3. str. toUtf8(). data(); //编码为UTF8编码
  4. str. toLatin1(). data(); //编码为Latin-1
  5. 5/ 10补充:以上最好分成两步进行,不然有时候会报错
  6. QByteArray arry=str. toUtf8();
  7. char *ch=arry. data();
  8. //方式2
  9. QByteArray ba2;
  10. ba2. append(str);
  11. char *buffer = ba2. data();

补充:

char*转QString的方法:


    
    
  1. const char *c1 = "Hello World 1!";
  2.     QString s1(c1);
  3.     qDebug() << c1 << s1;

二、合并字符串


    
    
  1. QString str1 = "Welcome";
  2. QString str2 = " Hello,";
  3. //方式1 直接相加 +
  4. str1 = str1 + " to you"; //str1="Welcome to you"
  5. str2. sprintf( "%s %s", "Welcome ", " to you! "); //str2 = "Welcome to you!"
  6. //方式2 加到末尾 append
  7. str1 += " World! "; //str2="Welcome to you World!"
  8. str2. append( "fff"); //效果同上
  9. //方式3 自由组合 arg
  10. QString str;
  11. str = QString( "%1 was %2."). arg( "he"). arg( "boy"); //str = "he was boy";

三、分割字符串

·split()函数


    
    
  1. QString str = "a,,b,c";
  2. QStringList list1 = str. split( ",");
  3. // list1: [ "a", "", "b", "c" ]
  4. QStringList list2 = str. split( ",", QString::SkipEmptyParts);
  5. // list2: [ "a", "b", "c" ]

·mid(pos,n)函数

返回在给定位置(第一个参数)开始且达到给定长度(第二个参数)的字串


    
    
  1. QString x = "Nine pineapples";
  2. QString y = x. mid( 5, 4); // y == "pine"
  3. QString z = x. mid( 5); // z == "pineapples"

·QString::section

这个函数把字符串看成是几个块,这些块由 sep 分隔,start 和 end 指定块号,end 默认为 –1 ,返回的是[ start, end ]内的块组成的字符串,如果 start 和 end 都是负数,那么将从字符串的后面往前面数,返回 [ -end, –start ]内的块组成的字符串。SectionFlags是一些标记,如SectionSkipEmpty表示如果两个分隔符之间是空串,那么就会跳过。


    
    
  1. QString QString::section ( QChar sep,
  2. int start,
  3. int end = -1,
  4. SectionFlags flags = SectionDefault ) const

实例:


    
    
  1. QString str;
  2. QString csv = "forename,middlename,surname,phone";
  3. QString path = "/usr/local/bin/myapp"; // First field is empty
  4. QString::SectionFlag flag = QString::SectionSkipEmpty;
  5. str = csv. section( ',', 2, 2); // str == "surname"
  6. str = path. section( '/', 3, 4); // str == "bin/myapp"
  7. str = path. section( '/', 3, 3, flag); // str == "myapp"

·truncate(int)函数,从指定位置截断字符串str


    
    
  1. QString str = "Vladivostok";
  2. str. truncate( 4);
  3. // str == "Vlad"

四、去除字符串两端的空白

空白字符包括回车符号“\n”、换行符“\r”、制表符"\t"和空格字符:“ ”等

·QString::trimmed()函数

移除字符串两端的空白符

·QString::simplified()函数

移除字符串两端的空白字符,使用单个空格字符“ ”代替字符串中出现的空白字符


    
    
  1. QString str = " lots\t of\nwhitespace\r\n ";
  2. str = str. trimmed();
  3. //str == "lots\t of\nwhitespace" 注:qDebug()<<str并没有展现出效果
  4. str = str. simplified();
  5. // str == "lots of whitespace";注:qDebug()<<str可以看出效果

五、查找是否包含字符串

·indexOf()

如果想查明一个字符串是否包含一个特定的字符、子串、或正则表达式,可以使用QString中的indexOf()函数,函数原型如下


    
    
  1. int QString::indexOf (
  2. const QString & str,
  3. int from = 0,
  4. Qt::CaseSensitivity cs = Qt::CaseSensitive ) const

实例:第一个出参数是要查找的内容,第二个参数是查找的起始位置,从0开始数


    
    
  1. QString x = "sticky question";
  2. QString y = "sti";
  3. x. indexOf(y); // returns 0
  4. x. indexOf(y, 1); // returns 10
  5. x. indexOf(y, 10); // returns 10
  6. x. indexOf(y, 11); // returns -1

·startWith()/endsWith()函数

检查字符串是否以某个字符(串)开始或结束


    
    
  1. QString str = "Bananas";
  2. str. startsWith( "Ban"); // returns true
  3. str. startsWith( "Car"); // returns false

·left(n)/right(n)函数

返回字符串的前n个字符串或者最后n个字符,例:str.left(n);

六、常见问题

·如何在字符串换行排列里面加双引号?

·

·Linux下qDebug()解决输出中文乱码的问题

一般在Window开发环境里,是GBK编码,在Linux开发环境里,是utf-8编码;出现乱码的原因要考虑原代码是何种编码格式

方式一、解决单个乱码问题

QString::fromLocal8Bit("我司");
    
    

 方式二、解决整个工程代码中文乱码,在main函数里面加上这几句


    
    
  1. //定义utf-8编码格式
  2. QTextCodec *codec = QTextCodec:: codecForName( "utf-8");
  3. //这个函数主要用于设置和对本地文件系统读写时候的默认编码格式。
  4. //比如通过流读取一个文件内容时的编码格式或者通过qDebug输出打印信息时的编码
  5. QTextCodec:: setCodecForLocale(codec);
  6. //用在字符常量或者QByteArray构造QString对象时使用的一种编码方式
  7. QTextCodec:: setCodecForCStrings(codec);
  8. //这个函数的作用是设置传给tr函数时的默认字符串编码
  9. QTextCodec:: setCodecForTr(codec);

其他

 ·数字转换为字符串


    
    
  1. //方式1
  2. QString str = QString :: number( 59.6);
  3. //方式2
  4. str. setNum( 1234); // str == "1234"

·chop(int n)函数,从字符串末尾删除n个字符

如果n大于SIZE(),则结果为空字符串 


    
    
  1. QString str("LOGOUT\r\n");
  2. str. chop( 2);
  3. // str == "LOGOUT"

·remove(i,n)删除字符串中的

表示从第几个位置(从0开始数)开始,删除n个字符(从1开始数)


    
    
  1. QString s = "Montreal";
  2. s. remove( 1, 4);
  3. // s == "Meal"

</article>
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值