如何根据给定的字符长度拆分 QString?
How to split QString based on a given character length?
我正在尝试根据每组 19 个字符拆分 QString
。
这是字符串:
+1.838212011719E+04-1.779050827026E+00 3.725290298462E-09 0.000000000000E+00
我想把它分成:
+1.838212011719E+04
-1.779050827026E+00
3.725290298462E-09
0.000000000000E+00
我已经尝试使用 QRegularExpression
,但我无法想出解决方案。
如何操作?
使用这个正则表达式:
^(.{19})(.{19})(.{19})(.{19})
我还建议使用 RegEx101 这样的工具。试一试,看看会发生什么。
解决方案
我建议您使用循环而不是正则表达式。
例子
这是我为您准备的如何在 C++ 中实现的示例:
bool splitString(const QString &str, int n, QStringList &list)
{
if (n < 1)
return false;
QString tmp(str);
list.clear();
while (!tmp.isEmpty()) {
list.append(tmp.left(n));
tmp.remove(0, n);
}
return true;
}
注意: 您可以选择使用 QString::trimmed(),即 list.append(tmp.left(n).trimmed());
,以去除前导空格。
结果
正在使用您的输入测试示例:
QStringList list;
if (splitString("+1.838212011719E+04-1.779050827026E+00 3.725290298462E-09 0.000000000000E+00", 19, list))
qDebug() << list;
产生以下结果:
没有QString::trimmed()
("+1.838212011719E+04", "-1.779050827026E+00", " 3.725290298462E-09", " 0.000000000000E+00")
和QString::trimmed()
("+1.838212011719E+04", "-1.779050827026E+00", "3.725290298462E-09", "0.000000000000E+00")
我正在尝试根据每组 19 个字符拆分 QString
。
这是字符串:
+1.838212011719E+04-1.779050827026E+00 3.725290298462E-09 0.000000000000E+00
我想把它分成:
+1.838212011719E+04
-1.779050827026E+00
3.725290298462E-09
0.000000000000E+00
我已经尝试使用 QRegularExpression
,但我无法想出解决方案。
如何操作?
使用这个正则表达式:
^(.{19})(.{19})(.{19})(.{19})
我还建议使用 RegEx101 这样的工具。试一试,看看会发生什么。
解决方案
我建议您使用循环而不是正则表达式。
例子
这是我为您准备的如何在 C++ 中实现的示例:
bool splitString(const QString &str, int n, QStringList &list)
{
if (n < 1)
return false;
QString tmp(str);
list.clear();
while (!tmp.isEmpty()) {
list.append(tmp.left(n));
tmp.remove(0, n);
}
return true;
}
注意: 您可以选择使用 QString::trimmed(),即 list.append(tmp.left(n).trimmed());
,以去除前导空格。
结果
正在使用您的输入测试示例:
QStringList list;
if (splitString("+1.838212011719E+04-1.779050827026E+00 3.725290298462E-09 0.000000000000E+00", 19, list))
qDebug() << list;
产生以下结果:
没有
QString::trimmed()
("+1.838212011719E+04", "-1.779050827026E+00", " 3.725290298462E-09", " 0.000000000000E+00")
和
QString::trimmed()
("+1.838212011719E+04", "-1.779050827026E+00", "3.725290298462E-09", "0.000000000000E+00")