我想删除QString
中的所有尾随空格字符。我希望用str.rstrip()
来完成Python函数QString
。
我做了一些谷歌搜索,发现了这个:http://www.qtforum.org/article/20798/how-to-strip-trailing-whitespace-from-qstring.html
所以我现在所拥有的是这样的:
while(str.endsWith( ' ' )) str.chop(1);
while(str.endsWith( '\n' )) str.chop(1);
有更简单的方法吗?我想在开头保留所有的空白。
答案 0 :(得分:41)
QString
有两个与修剪空白相关的方法:
QString QString::trimmed() const
QString QString::simplified() const
如果只想删除尾随空格,则需要自己实现。这是一个模仿trimmed
:
QString rstrip(const QString& str) {
int n = str.size() - 1;
for (; n >= 0; --n) {
if (!str.at(n).isSpace()) {
return str.left(n + 1);
}
}
return "";
}
答案 1 :(得分:27)
QString
仅提供两个与修剪相关的功能。如果它们不适合您的需求,我担心您需要实施自己的自定义修剪功能。
QString QString::simplified () const
返回从开头和结尾删除空格的字符串,并将每个内部空格序列替换为单个空格。
QString str = " lots\t of\nwhitespace\r\n ";
str = str.simplified();
// str == "lots of whitespace";
QString QString::trimmed () const
返回从开头和结尾删除空格的字符串。
QString str = " lots\t of\nwhitespace\r\n ";
str = str.trimmed();
// str == "lots\t of\nwhitespace"
答案 2 :(得分:7)
如果您在开头没有或者不需要任何空格,则可以使用QString QString::trimmed () const
。
这忽略了任何内部空白,由Andrejs Cainikovs提供的替代解决方案进行了纠正。
答案 3 :(得分:6)
您可以使用正则表达式执行此操作:
#include <QtCore>
int main(int argc, char** argv)
{
QCoreApplication app(argc, argv);
QString str("Hello world ");
qDebug() << str;
str.remove(QRegExp("\\s+$"));
qDebug() << str;
return 0;
}
这是否会更快,我不确定。
答案 4 :(得分:3)
QString::Trimmed()从开头和结尾删除空格 - 如果您确定开头没有空格,可以使用它。
答案 5 :(得分:3)
如果您不想制作字符串的深层副本:
QString & rtrim( QString & str ) {
while( str.size() > 0 && str.at( str.size() - 1 ).isSpace() )
str.chop( 1 );
return str;
}
答案 6 :(得分:1)
没有深层复制,也没有重复调整尺寸/印章:
QString & rtrimInPlace (QString &str) {
for (int n = str.size() - 1; n >= 0; -- n)
if (!str.at(n).isSpace()) {
str.truncate(n + 1);
break;
}
return str;
}
答案 7 :(得分:0)
据我所知,唯一的内置函数是trimmed()
和simplified()
。所以你需要手动修剪。在这种情况下,您应该使用QChar
函数isSpace()
来检查字符是否为空格字符。
答案 8 :(得分:0)
这是Frank S. Thomas发布的答案的变体:
QString rstrip(const QString& str, const char *skip = " \r\n\t") {
int n = str.size() - 1;
for (; n >= 0; --n) {
if (0 == strchr(skip, str.at(n).toAscii()))
return str.left(n + 1);
}
return "";
}
答案 9 :(得分:0)
您可以在字符串的开头添加一个非空格字符,修剪它,然后删除字符
str1=QString("-"+str).trimmed().mid(1);