我如何检查QString是否只包含“不可见”字符?
我想检查一下QString
是否仅由不可打印或不可见的字符组成。 QString
可能包含unicode ...
我想象一个正则表达式可能会起作用,但我不知道如何创建这样的正则表达式。
我如何检查QString
是否只包含“不可见”字符? (空间, n
, r
, t
...)
我的“蛮力”尝试
bool checkIfEmpty(const QString &contents) const
{
for(QString::const_iterator itr(contents.begin()); itr != contents.end(); ++itr)
{
if(*itr != 'n' && *itr != 'r' && *itr != ' ' && *itr != 't')
return false;
}
return true;
}
QString
由UTF-16编码单元组成,令人困惑地命名为QChar
,而不是字符。 一个字符可以用一个或多个Unicode代码点表示。 一般来说,您需要迭代字符串并处理所有代理对,以通过QChar::surrogateToUcs4
获取Unicode代码点(UTF-32 / UCS-4)。 然后你得到这些QChar::category
,并检查它们是什么。 尽管如此,这仍然可以用仍然在QChar
运行的正则表达式来表示。
值得庆幸的是,所有非打印代码点均以UTF-16的单个代码单元表示,因此通过单独查看每个QChar
,您可以知道它是什么。
而且, QChar::isSpace()
知道所有这些,而QRegExp
匹配s
类别下的这些字符。
因此,您的支票减少到:
bool isWhiteSpace(const QString & str)
{
return QRegExp("s*").exactMatch(str);
}
将正则表达式作为类成员保留是有用的,因为从模式构造它是很昂贵的:
// C++11, Qt 5
class C {
QRegExp m_whiteSpace { QStringLiteral("s*") };
public:
bool isWhiteSpace(const QString & str) const {
return m_whiteSpace.exactMatch(str);
}
};
// C++98, Qt 5
class C {
QRegExp m_whiteSpace;
public:
C() : m_whiteSpace(QStringLiteral("s*")) {}
bool isWhiteSpace(const QString & str) const {
return m_whiteSpace.exactMatch(str);
}
};
// C++98, Qt 4
class C {
QRegExp m_whiteSpace;
public:
C() : m_whiteSpace(QLatin1String("s*")) {}
bool isWhiteSpace(const QString & str) const {
return m_whiteSpace.exactMatch(str);
}
};
QString可能包含unicode
不可能。 请问。 总是。 这是一个QString
。 它是UTF-16代码单元的容器。 在Unicode标准中定义的解释中,它们“是”Unicode。 拉丁语-1块与天梵里块相比,不逊色于Unicode。
你的意思可能是该字符串的内容不限于Unicode代码点或块的任何子集。
尝试这种方法
bool checkIfEmpty(const QString contents) const
{
if(contents.trimmed()=="") return true;
else return false;
}
请注意,只有在您的意思是“不可打印”是空格或制表符时才可以使用
链接地址: http://www.djcxy.com/p/60835.html上一篇: How can I check if a QString contains only "invisible" characters?