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

bis0qfac  于 2023-03-10  发布在  其他
关注(0)|答案(2)|浏览(121)

我尝试从sqlite中的一个文本列中进行一个基本的抓取,并将其处理为List<String>模型中的一个字段。如果数据为空,那么我想将其设置为一个空列表[]。然而,当我出于某种原因这样做时,我得到了一个看起来为空但实际长度为1的列表。为了重现这个问题,我使用以下方法简化了问题。

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

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

sqxo8psd

sqxo8psd1#

这应该打印1。
当你用逗号分割字符串时,你会找到逗号在字符串中的所有位置,然后返回一个字符串列表,其中包括第一个逗号之前和最后一个逗号之后的字符串。如果输入不包含逗号,你仍然会找到初始字符串。
如果你的例子是:

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

你可能会认为parts是列表["451"],这里也是这样,因为split函数不能区分空的和非空的。
如果一个字符串包含逗号,比如字符串",",在拆分时会得到两个部分,在本例中是两个空的部分,一般来说,如果一个字符串包含n个匹配的拆分模式,则会得到n+1个部分。

ryevplcw

ryevplcw2#

如果您想从拆分结果中排除空部分(包括空字符串本身是否被拆分),您可以执行如下操作:

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

如果input == '',则结果将为[]

相关问题