我正在尝试从 sqlite 中的 Text Column 进行基本抓取,并将其处理为List<String>. 如果数据为空,那么我想将其设置为空列表[]。但是,当我出于某种原因执行此操作时,我得到一个看起来为空但实际上长度为 1 的列表。为了重现此问题,我使用以下内容简化了该问题。
String stringList = '';
List<String> aList = [];
aList = stringList.split(',');
print(aList.length);
Run Code Online (Sandbox Code Playgroud)
为什么会打印 1?它不应该返回 0,因为它没有带逗号的值吗?
这应该打印 1。
当你用逗号分割一个字符串时,你会找到字符串中逗号的所有位置,然后返回这些字符串周围的字符串列表。这包括第一个逗号之前和最后一个逗号之后的字符串。在输入不包含逗号的情况下,您仍然可以找到初始字符串。
如果您的示例是:
String input = "451";
List<String> parts = input.split(",");
prtin(parts.length);
Run Code Online (Sandbox Code Playgroud)
您可能希望部分成为列表["451"]。这也是这里发生的事情,因为 split 函数不区分空部分和非空部分。
如果字符串确实包含逗号,比如 string ",",则在拆分时会得到两个部分,在这种情况下是两个空部分。通常,对于包含拆分模式的 n 个匹配项的字符串,您会得到 n+1 个部分。