去除行首指定字符(串)
1. 使用replace与正则表达式配合
-
其正则表达式形式为需要去除的'^'符号+'字符';
-
'^'符号的意思为结尾。
QString s = "testHello world!!!";
s.replace(QRegExp("^test"), "");
qDebug()<<s;
- 输出结果:
"Hello world!!!"
2.使用left与remove接口
-
left(n)为从行首往后找n个字符;
-
remove(position, n), position为行中位置,n为删除的字符数量。
QString s = "testHello world!!!";
if (s.left(4) == "test")
qDebug()<<s.remove(0, 4);
- 输出结果:
"Hello world!!!"
去除行尾指定字符(串)
1. 使用replace与正则表达式配合
-
其正则表达式形式为需要去除的'字符'+'$'符号;
-
'$'符号的意思为结尾。
QString s = "Hello world!!!test";
s.replace(QRegExp("test$"), "");
qDebug()<<s;
- 输出结果:
"Hello world!!!"
2.使用right与remove接口
-
right(n)为从行尾往前找n个字符;
-
remove(position, n), position为行中位置,n为删除的字符数量。
QString s = "Hello world!!!test";
if (s.right(4) == "test")
qDebug()<<s.remove(s.length() - 4, 4);
- 输出结果:
"Hello world!!!"
关于两种方法的使用性能比较
1. 100000次的测试代码
/// [0]
QElapsedTimer timer;
timer.start();
for (int i = 0; i < 100000; i++) {
QString s = "testHello world!!!";
s.replace(QRegExp("^test"), "");
}
qDebug()<<timer.elapsed();
/// [0]
/// [1]
timer.start();
for (int i = 0; i < 100000; i++) {
QString s = "testHello world!!!";
if (s.left(4) == "test")
s.remove(0, 4);
}
qDebug()<<timer.elapsed();
/// [1]
2. 输出结果
455
89
3. 通过对比我们可以看到使用正则表达式会比使用left(right)与remove的形式慢,主要的原因是正则表达式需要解析表达式自身的原因。
总结
-
正则表达式使用方便,但性能会差点,处理字符且次数不多的情况下可以使用;
-
使用left(right)与remove组合操作上会多写一步,但性能更好;
-
正则表达式式一般是处理较为复杂的场合。