拆分空字符串时 Dart 列表计数显示为 1

问题描述 投票:0回答:2

我正在尝试从 sqlite 中的文本列中进行基本抓取,并将其处理为

List<String>
模型中的字段。如果数据为空,那么我想将其设置为空列表
[]
。但是,当我出于某种原因执行此操作时,我得到一个看起来为空但实际上长度为 1 的列表。为了重现此问题,我使用以下内容简化了该问题。

String stringList = '';
List<String> aList = [];
aList = stringList.split(',');
print(aList.length);

为什么打印 1?它不应该返回 0 因为其中没有带逗号的值吗?

list dart
2个回答
6
投票

这应该打印 1.

当你用逗号分割一个字符串时,你会找到字符串中逗号的所有位置,然后返回一个字符串列表around那些。这包括第一个命令之前和最后一个逗号之后的字符串。 在输入不包含逗号的情况下,您仍然会找到初始字符串。

如果你的例子是:

String input = "451";
List<String> parts = input.split(",");
prtin(parts.length);

您可能会期望零件是列表

["451"]
。这也是这里发生的情况,因为 split 函数不区分空部分和非空部分。

如果字符串确实包含逗号,比如字符串

","
,拆分时会得到两个部分,在本例中为两个空部分。通常,对于包含拆分模式的 n 个匹配项的字符串,您会得到 n+1 个部分。


0
投票

如果你想从拆分结果中排除空部分(包括如果空字符串本身被拆分),你总是可以这样做:

final parts = input.split(',').where((e) => e.isNotEmpty).toList();

如果

input == ''
,结果将是
[]
.

© www.soinside.com 2019 - 2024. All rights reserved.