zoukankan      html  css  js  c++  java
  • 5.QT-QString类

    Qt中的字符串类

    介绍

    • 采用Unicode编码 
    • 采用隐式共享技术,节省内存和不必要的数据拷贝
    • 隐式共享介于浅拷贝深拷贝之间,当两个string对象赋值时,会实现浅拷贝(共享一块内存),如果某个对象被修改了,则会实现深拷贝(从新开辟内存)
    • 跨平台使用,不需要考虑不同平台的兼容性
    • QString直接支持字符串与数字的相互转换
    • QString直接支持字符串大小比较
    • QString直接支持不同字符编码间的相互转换
    • QString直接支持std::stringstd::wstring的相互转换
    • QString直接支持正则表达式的应用

     

    QString常用函数

    static const QChar data[4] = { 0x0055, 0x006e, 0x10e3, 0x03a3 };
    QString str(data, 4);    //通过QChar宽字符初始化
    
    str = "hello";     //直接赋值
    
    str.length();    //获取字符串长度
    
    str.size();     //获取字符串数量,等价于length()
    
    str.capacity();   //获取容量,容量包含了当前string里不必增加内存就能使用的字符数
    
    str.isEmpty();      //如果str为空或为0 ,则返回true,否则返回false
    
    str.isNull();    //如果为0,则返回true,否则返回false
    
    str.clear();    //清空str
    
    str. resize(8);    //设置str的字符串长度
    
    str.fill('m');     //将str字符串,全部字符填为'm'
    
    str.fill('m',5);    //填充5个字符'm',并修改str的字符串长度为5
    
           
    str.append("ABC");   //在str字符串末尾附加"ABC"子串
    
    str.prepend("abc");    //在str字符串头部添加"abc"子串
     
    str. chop(2);    //从str字符串末尾, 去掉2个字符
    
    str = "Montreal";
    
    str.remove(1, 4);    //从str下标1位置开始,清除4个字符, s = "Meal"
    
    str.setNum(1234.5);    //数字转字符串 str = "1234.5"
    
    double val = str.toDouble();   //字符串转double  val =1234.5
     
    
    /*arg()成员函数:通过string串里通过“%数字”表示argument(参数) */
    str = QString("%1,%2,%3,%4,%5,%6")
        .arg("A","B","C")
        .arg("D","E","D");     //字符串参数替换 str1 = "A,B,C,D,E,D"
    
    str = QString("%1,%2")
             .arg(40)   
             .arg(40,0,16);        //将40以16进制转换为字符串,如果想使用大写的话,通过toUpper()函数来实现
                                   //还可以这样写QString("%1").arg(cnt,5,10,QChar('0');  //输出00050,表示保留5位有效数字,

    floatcnt2=50.12345;
      qDebug()<<QString::asprintf("%.2f",cnt2);  //打印50.12
      
    
    str.sprintf("%d %s",1,"first");    //通过一定参数输出到字符串里, str= "1 first"
    
    str="abcdef";
    
    str.indexOf ("bc");      //return 1
    
    str.indexOf ("bc",1);     //从str下标1的位置查找,return 1
    
    str.indexOf ("bc",2);       //没找到,则return -1
    
     
    str. lastIndexOf("bc");    //反向查找,从str末尾向前查找,return 1
     
    str. lastIndexOf("bc",5);    //反向查找,从str下标5的位置向前查找,return 1
    
    str.lastIndexOf("bc",-2);    //反向查找,从str末尾-1的位置向前查找
    str.insert( 2, "AB ");     //在str字符串下标2的位置插入"AB "子串 str="abcdefgh"; str2 = str.mid(3);   //提取子串,提取出str的下标为3到末尾,给str2 str2 = str.mid(3,4); //从str的下标为3开始,提取4个字符给str2 str = "th!ea minimum"; str.indexOf(QRegExp("[m i!]"), 0); // 使用正则表达式匹配查找,遇到m, ,i,! 时停止 ,所以return 2

    long a = 63;
    QString s = QString::number(a, 16);             // s == "3f"

    QString t = QString::number(a, 16).toUpper(); // t == "3F"
     
     QString str = "Bananas";
     str.startsWith("Ban");           //判断str的开头是否以"Ban"开头,returns true
     str.startsWith("Car");           // returns false

     常用四则运算符:

    QString str="*+-";
    str.indexOf(QRegExp("[+-]"));    //匹配一次+或-,所以return 1
    
    str="*asd12345682";
    str.indexOf(QRegExp("23"));      //匹配23成功,return 5
    
    str="*abcsd8de";
    str.indexOf(QRegExp("[0-9]"));      //匹配一次0~9数字,所以return 6 

     示例-通过四则运算匹配一个范围的数字

    比如:

    12.5-19.5Kg    :提取出12.5 和19.5

    125.68m~376.78m  :提取出125.68和376.78

    999.99美元    :提取出999.99

    代码如下:

        QString text = ui->stringText->text();
        QString number1,number2;
    
        int begin1=text.indexOf(QRegExp("[0-9]"));
        text.remove(0,begin1);
        int begin2=text.indexOf(QRegExp("[^0-9.]"));  //找非0~9,小数点以外的字符位置
        if(begin1==-1)
        {
            qDebug()<<"err";
            return ;
        }
    
        if(begin2!=-1)          //比如 123XYZ
           number1 = text.left(begin2);
        else        //只有一个数字
        {
             number1 = text;
             qDebug()<<"range:"<<number1.toFloat();
             return ;
        }
    
        text.remove(0,begin2);
        begin1=text.indexOf(QRegExp("[0-9]"));
        text.remove(0,begin1);
        begin2=text.indexOf(QRegExp("[^0-9.]"));        //找非0~9,小数点以外的字符位置
        if(begin1==-1)  //只有一个数字
        {
            qDebug()<<"range:"<<number1.toFloat();
            return ;
        }
    
        if(begin2!=-1)          //比如 123XYZ
            number2 = text.left(begin2);
        else
            number2 = text;
    
        qDebug()<<"range:"<<number1.toFloat()<<"~"<<number2.toFloat();

    打印如下:

     

     

     其它使用:

    QByteArray QString::toLocal8Bit () ;
        //获取字节数组对象
    char * QByteArray::data ();        //通过字节数组对象的成员data函数,获取char数组
    
    
    
      
    QString("%1").arg(cnt,5,10,QChar('0'
  • 相关阅读:
    java进阶知识--File类
    java进阶知识--函数式接口
    java进阶知识--Lambda表达式、递归
    java进阶知识--线程池
    java进阶知识--线程安全
    java进阶知识--多线程入门
    java基础知识--异常
    java基础知识--可变参数
    mysql中如何不重复插入满足某些条件的重复的记录的问题
    有关map中使用iterate迭代器遍历的不保序问题和list remove(object)的细节问题
  • 原文地址:https://www.cnblogs.com/lifexy/p/8884205.html
Copyright © 2011-2022 走看看