Qt 字符串类应用
- Qt 字符串类应用
- 1. 创建和初始化 QString
- 2. 字符串连接
- 3. 字符串格式化
- 4. 字符串长度和访问字符
- 5. 字符串查找和替换
- 6. 字符串分割和连接
- 7. 字符串转换
- 8.判断子字符串是否存在
- 9. 使用正则表达式查询
- 10 检查字符串是否以特定子字符串开头
- 11.比较字符串
- 使用 operator== 和 operator!=
- 使用 compare 方法
- 使用 localeAwareCompare 方法
- 使用 operator<, operator<=, operator>, operator>=
- 字符串排序
- 12 使用 left, right, mid 方法提取子字符串
- 13 使用 trimmed, simplified 方法清理字符串
- 14.使用 toUpper, toLower 方法转换大小写
- 15.使用 isNull 和 isEmpty 方法检查字符串状态
- 16 将字符转换为 ASCII 码
- 17 将字符串转换为 UTF-8 编码
- 18.将 UTF-8 编码的字节数组转换为字符串
- 19 使用 QTextCodec 进行编码转换
- 20 使用 QTextStream 进行文件读写
Qt 字符串类应用
在 Qt 中,字符串类 QString 是一个非常强大且常用的类,用于处理 Unicode 字符串。QString 提供了丰富的功能,包括字符串操作、格式化、转换等。
以下是一些常见的 QString 应用示例:
1. 创建和初始化 QString
#include <QString>int main() {// 创建一个空的 QStringQString emptyString;// 使用字符串字面量初始化 QStringQString str = "Hello, World!";// 使用 fromUtf8 方法初始化 QStringQString utf8String = QString::fromUtf8("你好,世界!");return 0;
}
2. 字符串连接
#include <QString>
#include <QDebug>int main() {QString str1 = "Hello";QString str2 = "World";// 使用 + 运算符连接字符串QString result = str1 + " " + str2;qDebug() << result; // 输出: "Hello World"// 使用 append 方法连接字符串str1.append(" ").append(str2);qDebug() << str1; // 输出: "Hello World"return 0;
}
3. 字符串格式化
#include <QString>
#include <QDebug>int main() {int number = 42;QString str = QString("The answer is %1").arg(number);qDebug() << str; // 输出: "The answer is 42"// 格式化多个参数QString name = "Alice";int age = 30;QString formattedStr = QString("Name: %1, Age: %2").arg(name).arg(age);qDebug() << formattedStr; // 输出: "Name: Alice, Age: 30"return 0;
}
4. 字符串长度和访问字符
#include <QString>
#include <QDebug>int main() {QString str = "Hello";// 获取字符串长度int length = str.length();qDebug() << "Length:" << length; // 输出: "Length: 5"// 访问字符QChar ch = str.at(1);qDebug() << "Second character:" << ch; // 输出: "Second character: e"// 修改字符str[0] = 'h';qDebug() << str; // 输出: "hello"return 0;
}
5. 字符串查找和替换
#include <QString>
#include <QDebug>int main() {QString str = "Hello, World!";// 查找子字符串int index = str.indexOf("World");qDebug() << "Index of 'World':" << index; // 输出: "Index of 'World': 7"// 替换子字符串QString replacedStr = str.replace("World", "Qt");qDebug() << replacedStr; // 输出: "Hello, Qt!"return 0;
}
6. 字符串分割和连接
#include <QString>
#include <QStringList>
#include <QDebug>int main() {QString str = "apple,banana,cherry";// 分割字符串QStringList list = str.split(",");qDebug() << list; // 输出: ("apple", "banana", "cherry")//牛逼// 连接字符串QString joinedStr = list.join("; ");qDebug() << joinedStr; // 输出: "apple; banana; cherry"return 0;
}
7. 字符串转换
#include <QString>
#include <QDebug>int main() {QString str = "42";// 转换为整数int number = str.toInt();qDebug() << "Number:" << number; // 输出: "Number: 42"// 整数转换为字符串QString newStr = QString::number(number);qDebug() << newStr; // 输出: "42"return 0;
}
8.判断子字符串是否存在
#include <QString>
#include <QDebug>int main() {QString str = "Hello, World!";// 判断是否包含子字符串 "World"bool containsWorld = str.contains("World");qDebug() << "Contains 'World':" << containsWorld; // 输出: "Contains 'World': true"// 判断是否包含不存在的子字符串 "Qt"bool containsQt = str.contains("Qt");qDebug() << "Contains 'Qt':" << containsQt; // 输出: "Contains 'Qt': false"return 0;
}
9. 使用正则表达式查询
#include <QString>
#include <QRegExp>
#include <QDebug>int main() {QString str = "Hello, World! Hello, Qt!";// 使用 QRegExp 查找所有匹配的子字符串QRegExp rx("Hello");int pos = 0;while ((pos = rx.indexIn(str, pos)) != -1) {qDebug() << "Found 'Hello' at index:" << pos;pos += rx.matchedLength();}return 0;
}#include <QString>
#include <QRegularExpression>
#include <QDebug>int main() {QString str = "Hello, World! Hello, Qt!";// 使用 QRegularExpression 查找所有匹配的子字符串QRegularExpression re("Hello");QRegularExpressionMatchIterator it = re.globalMatch(str);while (it.hasNext()) {QRegularExpressionMatch match = it.next();qDebug() << "Found 'Hello' at index:" << match.capturedStart();}return 0;
}
10 检查字符串是否以特定子字符串开头
#include <QString>
#include <QDebug>int main() {QString str = "Hello, World!";// 检查字符串是否以 "Hello" 开头bool startsWithHello = str.startsWith("Hello");qDebug() << "Starts with 'Hello':" << startsWithHello; // 输出: "Starts with 'Hello': true"// 检查字符串是否以 "hello" 开头(大小写敏感)bool startsWithHelloInsensitive = str.startsWith("hello", Qt::CaseInsensitive);qDebug() << "Starts with 'hello' (case insensitive):" << startsWithHelloInsensitive; // 输出: "Starts with 'hello' (case insensitive): true"return 0;
}
11.比较字符串
使用 operator== 和 operator!=
#include <QString>
#include <QDebug>int main() {QString str1 = "Hello";QString str2 = "Hello";QString str3 = "World";// 比较字符串是否相等bool isEqual = (str1 == str2);qDebug() << "str1 == str2:" << isEqual; // 输出: "str1 == str2: true"// 比较字符串是否不相等bool isNotEqual = (str1 != str3);qDebug() << "str1 != str3:" << isNotEqual; // 输出: "str1 != str3: true"return 0;
}
使用 compare 方法
#include <QString>
#include <QDebug>int main() {QString str1 = "Hello";QString str2 = "hello";// 比较字符串(大小写敏感)int result = str1.compare(str2);qDebug() << "str1.compare(str2):" << result; // 输出: "str1.compare(str2): -32"// 比较字符串(大小写不敏感)int resultInsensitive = str1.compare(str2, Qt::CaseInsensitive);qDebug() << "str1.compare(str2, Qt::CaseInsensitive):" << resultInsensitive; // 输出: "str1.compare(str2, Qt::CaseInsensitive): 0"return 0;
}
使用 localeAwareCompare 方法
localeAwareCompare 方法用于根据当前区域设置进行字符串比较。这对于需要考虑语言和文化差异的比较非常有用。
#include <QString>
#include <QDebug>int main() {QString str1 = "Ångström";QString str2 = "Angstrom";// 使用区域设置进行比较int result = str1.localeAwareCompare(str2);qDebug() << "str1.localeAwareCompare(str2):" << result; // 输出: "str1.localeAwareCompare(str2): -1"return 0;
}
使用 operator<, operator<=, operator>, operator>=
QString 还重载了 <, <=, >, >= 运算符,用于比较字符串的大小。
#include <QString>
#include <QDebug>int main() {QString str1 = "apple";QString str2 = "banana";// 比较字符串大小bool isLess = (str1 < str2);qDebug() << "str1 < str2:" << isLess; // 输出: "str1 < str2: true"bool isGreaterEqual = (str2 >= str1);qDebug() << "str2 >= str1:" << isGreaterEqual; // 输出: "str2 >= str1: true"return 0;
}
字符串排序
#include <QStringList>
#include <QDebug>int main() {QStringList list = {"banana", "apple", "cherry"};// 对字符串列表进行排序list.sort();qDebug() << "Sorted list:" << list; // 输出: "Sorted list: ("apple", "banana", "cherry")"return 0;
}
12 使用 left, right, mid 方法提取子字符串
#include <QString>
#include <QDebug>int main() {QString str = "Hello, World!";// 提取前5个字符QString leftStr = str.left(5);qDebug() << "Left 5 characters:" << leftStr; // 输出: "Left 5 characters: Hello"// 提取后6个字符QString rightStr = str.right(6);qDebug() << "Right 6 characters:" << rightStr; // 输出: "Right 6 characters: World!"// 提取从位置7开始的5个字符QString midStr = str.mid(7, 5);qDebug() << "Mid 5 characters from index 7:" << midStr; // 输出: "Mid 5 characters from index 7: World"return 0;
}
13 使用 trimmed, simplified 方法清理字符串
trimmed 方法用于去除字符串两端的空白字符,而 simplified 方法不仅去除两端的空白字符,还用单个空格替换连续的空白字符。
#include <QString>
#include <QDebug>int main() {QString str = " Hello, World! ";// 去除两端的空白字符QString trimmedStr = str.trimmed();qDebug() << "Trimmed string:" << trimmedStr; // 输出: "Trimmed string: Hello, World!"// 去除两端的空白字符,并用单个空格替换连续的空白字符QString simplifiedStr = str.simplified();qDebug() << "Simplified string:" << simplifiedStr; // 输出: "Simplified string: Hello, World!"return 0;
}
14.使用 toUpper, toLower 方法转换大小写
#include <QString>
#include <QDebug>int main() {QString str = "Hello, World!";// 转换为大写QString upperStr = str.toUpper();qDebug() << "Uppercase string:" << upperStr; // 输出: "Uppercase string: HELLO, WORLD!"// 转换为小写QString lowerStr = str.toLower();qDebug() << "Lowercase string:" << lowerStr; // 输出: "Lowercase string: hello, world!"return 0;
}
15.使用 isNull 和 isEmpty 方法检查字符串状态
#include <QString>
#include <QDebug>int main() {QString nullStr;QString emptyStr = "";QString nonEmptyStr = "Hello";// 检查字符串是否为空(未初始化)qDebug() << "Null string:" << nullStr.isNull(); // 输出: "Null string: true"qDebug() << "Empty string:" << emptyStr.isNull(); // 输出: "Empty string: false"// 检查字符串是否为空字符串(长度为0)qDebug() << "Empty string:" << emptyStr.isEmpty(); // 输出: "Empty string: true"qDebug() << "Non-empty string:" << nonEmptyStr.isEmpty(); // 输出: "Non-empty string: false"return 0;
}
16 将字符转换为 ASCII 码
#include <QString>
#include <QDebug>int main() {QChar ch = 'A';// 获取字符的 ASCII 码ushort asciiCode = ch.unicode();qDebug() << "ASCII code of 'A':" << asciiCode; // 输出: "ASCII code of 'A': 65"return 0;
}
17 将字符串转换为 UTF-8 编码
#include <QString>
#include <QDebug>
#include <QByteArray>int main() {QString str = "你好,世界!";// 将字符串转换为 UTF-8 编码的字节数组QByteArray utf8Bytes = str.toUtf8();qDebug() << "UTF-8 bytes of '你好,世界!':" << utf8Bytes; // 输出: "UTF-8 bytes of '你好,世界!': "\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c\xef\xbc\x81""return 0;
}
18.将 UTF-8 编码的字节数组转换为字符串
#include <QString>
#include <QDebug>
#include <QByteArray>int main() {QByteArray utf8Bytes = QByteArray("\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c\xef\xbc\x81");// 将 UTF-8 编码的字节数组转换为字符串QString str = QString::fromUtf8(utf8Bytes);qDebug() << "String from UTF-8 bytes:" << str; // 输出: "String from UTF-8 bytes: 你好,世界!"return 0;
}
19 使用 QTextCodec 进行编码转换
QTextCodec 类提供了更通用的方法来进行字符编码转换。以下是一个示例,展示如何使用 QTextCodec 将字符串转换为 UTF-8 编码并转换回字符串。
#include <QString>
#include <QDebug>
#include <QByteArray>
#include <QTextCodec>int main() {QString str = "你好,世界!";// 获取 UTF-8 编码器QTextCodec *utf8Codec = QTextCodec::codecForName("UTF-8");// 将字符串转换为 UTF-8 编码的字节数组QByteArray utf8Bytes = utf8Codec->fromUnicode(str);qDebug() << "UTF-8 bytes of '你好,世界!':" << utf8Bytes; // 输出: "UTF-8 bytes of '你好,世界!': "\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c\xef\xbc\x81""// 将 UTF-8 编码的字节数组转换为字符串QString restoredStr = utf8Codec->toUnicode(utf8Bytes);qDebug() << "String from UTF-8 bytes:" << restoredStr; // 输出: "String from UTF-8 bytes: 你好,世界!"return 0;
}
20 使用 QTextStream 进行文件读写
在处理文件时,可以使用 QTextStream 并指定编码为 UTF-8,以便正确读写 UTF-8 编码的文本文件。
#include <QString>
#include <QDebug>
#include <QFile>
#include <QTextStream>int main() {QString str = "你好,世界!";// 写入文件QFile file("output.txt");if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {QTextStream out(&file);out.setCodec("UTF-8");out << str;file.close();}// 读取文件QString fileContent;if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {QTextStream in(&file);in.setCodec("UTF-8");fileContent = in.readAll();file.close();}qDebug() << "File content:" << fileContent; // 输出: "File content: 你好,世界!"return 0;
}